关于chain,redirectAction回显问题

本文介绍了一个基于Struts框架的应用案例,展示了如何通过Struts处理表单数据,包括表单验证、数据绑定及视图跳转等关键流程。文章深入解析了控制器类中的add与save方法实现细节,以及如何配置struts.xml来支持不同的业务逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

action代码

public String add(){
	SysUser sysUser = SessionUtils.getSysUserFormSession(httpServletRequest);
	List<Company> companies =companyService.findAllCompanies();
	httpServletRequest.setAttribute("companies", companies);
	httpServletRequest.setAttribute("sysUser", sysUser);
	return "add";
}
public String save() throws IllegalAccessException, InvocationTargetException{
	LinkPerson linkPerson = new LinkPerson();
	BeanUtils.copyProperties(linkPerson, linkPersonForm);
	SysUser sysUser = new SysUser();
	if (linkPersonForm.getSysUserId()!=null) {
		Integer sysUserid = DataType.converterString2Integer(linkPersonForm.getSysUserId());
		sysUser.setId(sysUserid);
		linkPerson.setSysUser(sysUser);
		if (linkPersonForm.getCompanyId()!=null && linkPersonForm.getCompanyId().length()!=0) {
			Company company = new Company();
			Integer companyId = DataType.converterString2Integer(linkPersonForm.getCompanyId());
			company.setId(companyId);
			linkPerson.setCompany(company);
		}else {
			return "toAdd";//返回到add.jsp并且	要求能回显之前填写的linkPersonForm 信息		}
		return "toList";
	}
	return "toLogin";
}

struts.xml

 <action name="linkPersonAction_*" class="linkPersonAction" method="{1}">
    	<result name="list">/WEB-INF/jsp/page/crm/customer/linkman/view.jsp</result>
    	<result name="toLogin" type="redirectAction">
    		<param name="actionName">sysUserAction_isLogin</param>
            <param name="namespace">/sys</param>
    	</result>
    	<result name="toList" type="redirectAction">
    			<param name="actionName">linkPersonAction_list</param>
    	</result>
    	<result name="add">/WEB-INF/jsp/page/crm/customer/linkman/add.jsp</result>
    	<result name="toAdd" type="chain">
    		<param name="actionName">linkPersonAction_add</param>
    	</result>
    </action>


注意此时type="chain" 这相当于把save()方法所在的action的参数linkPersonForm传到了,新的action中(@scope("prototype")),而新action又实现了modelDriven

@Override
	public LinkPersonForm getModel() {
		return linkPersonForm;
	}

所以linkPersonForm有被放到了valuestack上,

所以在add.jsp可以回显

add,jsp

<body>
	<table>
	<s:form action="linkPersonAction_save.do" namespace="/crm" method="post">
		<s:hidden name="sysUserId" value="%{#request.sysUser.id}"></s:hidden>
		<tr><th>姓名</th><td><s:textfield name="cnname"></s:textfield></td><th>性别</th><td><s:radio name="sex" list="#{'M':'男','W':'女'}"></s:radio></td></tr>
		<tr><th>职务</th><td><s:textfield name="mobilePhone"></s:textfield></td><th>手机号</th><td><s:textfield name="duty"></s:textfield></td></tr>
		<tr><th>qq号</th><td><s:textfield name="qqNum"></s:textfield></td><th>qq昵称</th><td><s:textfield name="qqNickName"></s:textfield></td></tr>
		<tr><th>办公电话</th><td><s:textfield name="officePhone"></s:textfield></td><th>家庭电话</th><td><s:textfield name="homePhone"></s:textfield></td></tr>
		<tr><th>电子邮件</th><td><s:textfield name="email"></s:textfield></td><td><s:select list="%{#request.companies}" name="companyId" headerKey="" headerValue="---------" listKey="id" listValue="name"></s:select></td></tr>
		<s:submit value="提交"></s:submit>
		</s:form>
		<s:debug></s:debug>
	</table>
</body>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值