三圈问题的解决

以前做项目时老师说这是一个很著名的问题,我后来一想也是,不光是struts会有这个问题,可能控制层框架(control)都会存在这个问题,那这应该也算是思想的一种体现咯?

当你在一个editUI.jsp中保存编辑,此时向action中传递一个info对象,action跳转到listUI方法,listUI方法跳转到listUI.jsp,不想在listUI.jsp搜索框中回显出刚刚传递的info对象相关信息时,可以在info-struts.xml中设置

<action name="info_*" class="cn.itcast.nsfw.info.action.InfoAction" method="{1}">
			<result name="{1}">/WEB-INF/jsp/nsfw/info/{1}.jsp</result>
			<result name="list" type="redirectAction">
				<param name="actionName">info_listUI</param>
				<param name="info.title">${strTitle}</param>  <!--here-->
				<param name="pageNo">${pageNo}</param>
				<param name="encode">true</param>
			</result>			
		</action>

infoAction中设置成员变量private String strTitle;

在editUI.jsp中设置一个<s:hidden name="strTitle"/>

infoAction中

//列表页面
<span style="white-space:pre">	</span>public String listUI() throws Exception{
<span style="white-space:pre">		</span>//加载分类集合
<span style="white-space:pre">		</span>ActionContext.getContext().getContextMap().put("infoTypeMap", Info.INFO_TYPE_MAP);
<span style="white-space:pre">		</span>QueryHelper queryHelper = new QueryHelper(Info.class, "i");
<span style="white-space:pre">		</span>try {
<span style="white-space:pre">			</span>if(info != null){
<span style="white-space:pre">				</span>if(StringUtils.isNotBlank(info.getTitle())){
<span style="white-space:pre">					</span>info.setTitle(URLDecoder.decode(info.getTitle(), "utf-8"));
<span style="white-space:pre">					</span>queryHelper.addCondition("i.title like ?", "%" + info.getTitle() + "%");
<span style="white-space:pre">				</span>}
<span style="white-space:pre">				</span>
<span style="white-space:pre">			</span>}
<span style="white-space:pre">			</span>//根据创建时间降序排序
<span style="white-space:pre">			</span>queryHelper.addOrderByProperty("i.createTime", QueryHelper.ORDER_BY_DESC);
<span style="white-space:pre">			</span>pageResult = infoService.getPageResult(queryHelper, getPageNo(), getPageSize());
<span style="white-space:pre">		</span>} catch (Exception e) {
<span style="white-space:pre">			</span>throw new Exception(e.getMessage());
<span style="white-space:pre">		</span>}
<span style="white-space:pre">		</span>
<span style="white-space:pre">		</span>return "listUI";
<span style="white-space:pre">	</span>}

//跳转到编辑页面
	public String editUI(){
		//加载分类集合
		ActionContext.getContext().getContextMap().put("infoTypeMap", Info.INFO_TYPE_MAP);
		if (info != null && info.getInfoId() != null) {
			//解决查询条件覆盖的问题
			strTitle = info.getTitle();//将搜索栏的标题传递给strTitle
			info = infoService.findObjectById(info.getInfoId());
		}
		return "editUI";
	}
	//保存编辑
	public String edit(){
		try {
			if(info != null){
				infoService.update(info);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return "list";
	}

逻辑其实很简单从listUI.jsp到editUI.jsp这个过程中,editUI方法将info的title赋值给成员变量strTitle,转到editUI.jsp时,因为有隐藏域,strTitle值得以保留,点击保存跳转到listUI方法时,在配置文件中因为<param name="info.title">${strTitle}</param>覆盖action中info对象中title的值,使搜索条件不被改变


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值