三圈問題的解決

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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章