以前做項目時老師說這是一個很著名的問題,我後來一想也是,不光是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的值,使搜索條件不被改變