在項(xiàng)目開發(fā)的很多時(shí)候,用戶需要更友好,更容易理解的操作界面,而為了能夠達(dá)到這種表現(xiàn)界面,struts標(biāo)簽顯得力不從心,本人經(jīng)過幾個(gè)項(xiàng)目的開發(fā)當(dāng)中 逐漸的擯棄了struts標(biāo)簽,而由JSTL來做為JSP頁面的表達(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)銷部
而你想把張三和李四都列表出來,顯示為如下:
姓名 部門名稱
張三 行政部
李四 營(yíng)銷部
而且還需要用戶的列表鏈接到修改頁面當(dāng)中(假如只修改部門)應(yīng)該如何做呢。
在使用struts標(biāo)簽是很難做到的,除非你非常不在意內(nèi)存的使用(亂寫技術(shù)性代碼)
看看JSTL是如何做的吧。
從STRUTS的ACTION當(dāng)中加載兩個(gè)對(duì)象
List?GetAllDept?
=
?UserDAO.GetAllDept();
//
取得所有部門
List?GetALLUser?
=
?UserDAO.GetAllUser();
//
取得所有用戶
request.setAttribute(
"
View_Dept
"
,?GetAllDept);
request.setAttribute(
"
View_User
"
,?GetALLUser);
在頁面當(dāng)中加入對(duì)JSTL的引用
<%@?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");
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);
然后頁面當(dāng)中顯示如下(部門為L(zhǎng)ISTBOX),例子當(dāng)中只顯示部門
<html:select?property="DeptAsString">????????????
<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屬性。
這樣用戶的要求就可以完成了。
本次只說明方法,而代碼沒有經(jīng)過測(cè)試。希望大家多多觀注我的BLOG,下一次將臭罵ACTIONFROM不支持的DATE類型及解決方法。