1、Struts1标签库
1.1 Struts的三大标签库
Struts实际上包含了4个标签库:bean,logic,html,tiles
bean:用来在属性范围中定义或取得属性的,同时可以读取资源文件信息
logic:替代JSTL中的判断和循环
html:替代页面表单,完成自动回填以及错误信息的显示
tiles:美工标签,用来进行页面布局的调整以及样式管理的。
1.1.1、bean标签
有用的标签:bean:define,bean:write,bean:message\其他标:bean:size,bean:include,bean:resource等
bean:define:在页面上临时定义属性的
<center> <% // request.setAttribute("test","Hello"); %> <bean:define id="test" value="Hello" toScope="request"></bean:define> ${test} </center> |
id:属性名/value:属性值,类型只能是String或基本数据类型、toScope:保存的属性范围
bean:write标签:将属性范围中的属性值显示到页面上与EL功能类似 、区别在于这种bean:write安全性高,可以对<>代码进行自动的转义。如果不想转义,可以通过filter属性来进行设置。
<% User user = new User(); user.setUserid("<font color='red'>Hello</font>"); request.setAttribute("test",user); %> EL: ${test.userid} <br/> bean:<bean:write name="test" property="userid" filter="true"/> |
格式化数据(时间和金额)
<% request.setAttribute("money",1); %> EL: ${money} <br/> bean:<bean:write name="money" format=",###.00" /> |
这种格式还可以配置全局的设置,在资源文件中设置。
org.apache.struts.taglib.bean.format.date=yyyy\u5E74MM\u6708dd\u65E5 org.apache.struts.taglib.bean.format.float=,\#\#\#.00 |
bean:message国际化标签,结合资源文件一起使用。要完成国际化功能,首先需要定义多个资源文件。
每门语言对应一个资源文件,这些资源文件的主文件名都与配置好的资源文件名一致。按照以下格式进行命名 : 主文件名_语言名_国家区域名.properties
例如:ApplicationResources_en_US.properties、ApplicationResources_ja_JP.properties
ApplicationResources_zh_CN.properties
页面出现的所有文字信息都要在三个资源文件中定义三个版本、页面上改为标签形式
<font color="red"><html:errors/></font> <html:form action="/regist.do" method="post"> <bean:message key="msg.userid"/>:<html:text property="user.userid"></html:text> <br/> <bean:message key="msg.password"/>:<html:password property="user.password"></html:password><br/> <bean:message key="msg.age"/>:<html:text property="user.age"></html:text><br/> <bean:message key="msg.birthday"/>:<html:text property="birthday"></html:text><br/> <html:submit><bean:message key="msg.submit"/></html:submit> <html:reset><bean:message key="msg.reset"/></html:reset> </html:form> |
页面上加入三个超连接,分别连接三门语言。
请选择使用的语言: <a href="${pageContext.request.contextPath}/language.do?status=change&lan=zh_CN">中文</a> <a href="${pageContext.request.contextPath}/language.do?status=change&lan=en_US">English</a> <a href="${pageContext.request.contextPath}/language.do?status=change&lan=ja_JP">日本語</a><br/> |
在ActionForm中接收参数,并将参数处理成为Locale类型
public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { if ("change".equals(status)) {// 将lan转换为loc类型 String[] str = lan.split("_"); loc = new Locale(str[0], str[1]); } return null; } |
在Action中加入设置属性的功能
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { LanguageForm languageForm = (LanguageForm) form; if ("change".equals(languageForm.getStatus())) {// 将Struts当前的语言设置为读取近来接收的语言。 request.getSession().setAttribute(Globals.LOCALE_KEY, languageForm.getLoc()); return mapping.getInputForward(); } return null; } |
1.1.2、logic标签
c标签中的判断标签:c:if,c:choose,c:when,c:otherwise、判断标签包含以下12个:
判断存在标签:logic:present(属性存在),logic:notPresent(属性不存在)
判断等于标签:logic:equal(属性相等),logic:notEqual(属性不相等)
判断大于小于标签:logic:greaterThan(属性大于),logic:lessThan(属性小于)
属性大于等于小于等于标签:logic:greaterEqual(大于等于),logic:lessEqual(小于等于)
属性匹配标签(相当于数据库中的LIKE查询):logic:match(匹配),logic:notMatch(不匹配)
判断非空标签:logic:empty(属性为空),logic:notEmpty(属性不为空)
里面比较有用的标签:logic:present,logic:equal
使用方法参考bean:write
<% request.setAttribute("test",new java.util.Date()); %> <logic:present name="money"> 存在 </logic:present> <logic:notPresent name="money"> 不存在 </logic:notPresent> |
比较标签需要多一个value属性。
<center> <% User user = new User(); user.setUserid("wuzhulin"); request.setAttribute("test",user); user = new User(); user.setUserid("wuzhulin"); request.setAttribute("newUser",user);// value表示等号右边的值,name为等号左边的值 %> <logic:equal value="${newUser.userid}" name="test" property="userid"> 相等 </logic:equal> </center> |
value属性中直接写代码表示写一个字符串进去,如果要比较两个属性范围中的属性值,value中要加入EL表达式、替代c:forEach可以使用logic:iterate标签,完成循环迭代。
c:forEach var items
<% List all = new ArrayList(); for (int i = 0; i < 10; i++) { User user = new User(); user.setUserid("Hello" + i); user.setBirthday(new Date()); user.setAge(i * i); all.add(user); } request.setAttribute("all", all); %> <logic:present name="all"> <%//相当于 c:forEach var="user" items="${all}" %> <logic:iterate id="user" name="all"> ${user.userid } -- ${user.age } -- <bean:write name="user" property="birthday" format="yyyy-MM-dd" /><br /> </logic:iterate> </logic:present> |
完成单双行变色功能。
<logic:iterate id="user" name="all" indexId="index"> <span style="background:${index%2==0?"#eeeeee":"#dddddd"};"> ----- ${user.userid } -- ${user.age } -- <bean:write name="user" property="birthday" format="yyyy-MM-dd" /> </span><br /> </logic:iterate>
|
1.1.3、html标签
<html:form>表单:
普通标签:提交路径必须先加${pageContext.request.contextPath}、不自带路径验证功能、可以自行定义name属性、默认提交方式get
Html标签:不需要加上面的${pageContext.request.contextPath},直接以 / xxxx.do开头就可以。自动验证提交路径是否存在、不能自行定义name,其name值与要接收参数的ActionForm的name一致。默认提交方式是post
一般不需要修改的元素:Button、submit、Reset、image
改变比较小的组件:Text,password、Textarea、hidden:使用name作为提交的参数
没有自动回填、使用property作为提交的参数名有自动回填功能
特殊的几个组件(单选):Radio、select、option
都可以通过checked或selected设置默认选中、如果要显示下拉列表,一般是从数据库中查询出数据,并通过<option>显示选项,需要循环迭代
通过ActionForm的自动回填功能来设置默认选中、可以通过<html:options>标签自动将一些数据显示到下拉列表中。
多选框:input type=”checkbox”默认选中使用checked、html:checkbox:不支持默认选中、<html:multibox> 支持默认选中,需要通过ActionForm的回填功能
下拉列表范例:
<html:form action="/pages/back/teacher.do">
选择一级栏目:<html:select property="itemid">
<html:options collection="allItem" labelProperty="name" property="id"/>
</html:select>
</html:form>
其中html:options里,collection表示显示的集合的名称,property表示option中value值对应的属性名,labelProperty表示option中显示的文字对应的属性名。