struts標(biāo)簽,請(qǐng)你走開(系列一)
在項(xiàng)目開發(fā)的很多時(shí)候,用戶需要更友好,更容易理解的操作界面,而為了能夠達(dá)到這種表現(xiàn)界面,struts標(biāo)簽顯得力不從心,本人經(jīng)過(guò)幾個(gè)項(xiàng)目的開發(fā)當(dāng)中 逐漸的擯棄了struts標(biāo)簽,而由JSTL來(lái)做為JSP頁(yè)面的表達(dá)者。
struts標(biāo)簽之死穴一 不支持嵌套
看看這種常見的需求吧。一個(gè)用戶隸屬于一個(gè)職能部門,比如
項(xiàng)目要求 職能部門有五個(gè)(亂寫的)
1、企劃部
2、網(wǎng)絡(luò)集成部
3、行政部
4、營(yíng)銷部
5、產(chǎn)品部
項(xiàng)目要求 一共有二個(gè)員工
1、張三 隸屬于行政部
2、李四 隸屬于營(yíng)銷部
而你想把張三和李四都列表出來(lái),顯示為如下:
姓名 部門名稱
張三 行政部
李四 營(yíng)銷部
而且還需要用戶的列表鏈接到修改頁(yè)面當(dāng)中(假如只修改部門)應(yīng)該如何做呢。
在使用struts標(biāo)簽是很難做到的,除非你非常不在意內(nèi)存的使用(亂寫技術(shù)性代碼)
看看JSTL是如何做的吧。
從STRUTS的ACTION當(dāng)中加載兩個(gè)對(duì)象
List?GetALLUser? = ?UserDAO.GetAllUser(); // 取得所有用戶
request.setAttribute( " View_Dept " ,?GetAllDept);
request.setAttribute( " View_User " ,?GetALLUser);
<%@?taglib?uri="http://java.sun.com/jsp/jstl/core"?prefix="c"%>
然后寫代碼如下:
<table>
<tr>
<td?align="center">
<a?href="User.do?method=EditUser&UserId=<c:out?value='${View_User.UserId}'/>">
<c:out?value="${View_User.UserName}"?/>?</a>
</td>
<td?align="center">
<c:forEach?items="${View_Dept}"?var="View_Dept">
<c:if?test="${View_User.Dept.DeptId==View_Dept.DeptId}">
<c:out?value="${View_Dept.DeptName}"?/>
</c:if>????????????????????????????
</c:forEach>
</td>
</tr>
</table>
其中View_User.Dept.DeptId表示USER表與DEPT表的一個(gè)關(guān)系(外鍵)
還有如果在修改用戶時(shí),則也與上面的差不多,首先在ACTION當(dāng)中加入:
String?ModifyUserId?=?request.getParameter("GroupUserId");然后頁(yè)面當(dāng)中顯示如下(部門為L(zhǎng)ISTBOX),例子當(dāng)中只顯示部門
if?(ModifyUserId?==?null?&&?ModifyUserId.equals(""))?{
//這是出錯(cuò)處理
request.setAttribute("UserMsg",?"User.ValidateUser");
return?mapping.findForward("Fail");
}
DynaValidatorForm?UserActionForm?=?(DynaValidatorForm)?form;
User?user?=?UserDAO.GetUser(ModifyUserId);????????
List?GetAllDept?=?UserDAO.GetAllDept();//取得所有部門
request.setAttribute("View_Dept",?GetAllDept);
UserActionForm.set("User",?User);
<c:forEach?items="${View_Dept}"?var="View_Dept">????????
<c:choose>????????????????????????
<c:when?test="${User.Dept.DeptId==View_Dept.DeptId}">
<option????value="<c:out?value='${View_Dept.DeptId}'?/>"selected>????
<c:out?value="${View_Dept.DeptName}"?/>????????????
</option>????????????????????????????
</c:when>????????????????????????????
<c:otherwise>????????????????????????
<option?value="<c:out?value='${View_Dept.DeptId}'?/>">????????
<c:out?value="${View_Dept.DeptName}"?/></option>????????
</c:otherwise>????????????????????????
</c:choose>
</c:forEach>
</html:select>
可以看到HTML的SELECT有一個(gè)DeptAsString,你可以在FORM當(dāng)中指定一個(gè)STRING的FORM屬性。
這樣用戶的要求就可以完成了。
本次只說(shuō)明方法,而代碼沒有經(jīng)過(guò)測(cè)試。希望大家多多觀注我的BLOG,下一次將臭罵ACTIONFROM不支持的DATE類型及解決方法。
posted on 2006-09-25 16:36 @家軍 閱讀(457) 評(píng)論(0) 編輯 收藏