关于Struts 2.x的学习记录:
十三、非UI标签
UI标签指的是与表单无关(表单在HTML里面就称为UI)的标签,下面看几个有意思的标签
1.格式化日期显示
如果要想格式化日期的显示则使用“<s:date>”标签完成
<h1>雇佣日期:<s:date name="emp.hiredate" format="yyyy-MM-dd HH:mm:ss"/></h1>
以上的标签是直接访问了在Action中的属性内容,如果说现在要是访问属性范围中的内容请使用“#request”作为标记
ServletActionContext.getRequest().setAttribute("birthday", new java.util.Date());
<h1>生日:<s:date name="#request.birthday" format="yyyy-MM-dd HH:mm:ss"/></h1>
2.文本输出,在一个项目里面一定会存在有资源文件爱你,例如:有了一个Messages.properties文件,那么这个文件的内容除了可以使用Action读取之外,也可以使用标签读取
<h1>资源文件内容:<s:i18n name="Messages">
<s:text name="info.msg">
<s:param>慢半拍</s:param>
<s:param>白羊</s:param>
<s:param>旧词</s:param>
<s:param>梨花凉</s:param>
<s:param>天生难猜</s:param>
</s:text>
</s:i18n></h1>
大部分情况下,我们不需要如此操作,因为大部分内容是通过Action读取的,但是如果日后遇见有国际化程序的时候,请一定要这样读取
3.在整个页面之中,实际上最为重要的标签有两个:判断是否有内容,以及迭代输出
范例:生成一个list集合
private List<Dept> allDepts=new ArrayList<Dept>();
public List<Dept> getAllDepts(){
return allDepts;
}
public String execute() throws Exception{
for(int i=0;i<10;i++){
Dept d=new Dept();
d.setDeptno(i);
d.setDname("部门名称--"+i);
this.allDepts.add(d);
}
return "dept.show";
}
此时的程序之中,list集合是作为了DeptAction的一个属性,所以标签可以直接操作
范例:迭代输出
<s:if test="allDepts!=null">
<ul>
<s:iterator value="allDepts" var="dp">
<li>部门编号:<s:property value="deptno"/>,部门位置:<s:property value="dname"/></li>
</s:iterator>
</ul>
</s:if>
test属性的主要目的是为了判断是否满足条件,value表示Action的属性,var表示每次取出的对象
<s:if test="allDepts!=null">
<ul>
<s:iterator value="allDepts" var="dp">
<li>部门编号:${dp.deptno},部门位置:${dp.dname}</li>
</s:iterator>
</ul>
</s:if>
如果说现在要进行属性传递操作,那么也必须加上“#”符
public String execute() throws Exception{
List<Dept> allDepts=new ArrayList<Dept>();
for(int i=0;i<10;i++){
Dept d=new Dept();
d.setDeptno(i);
d.setDname("部门名称--"+i);
allDepts.add(d);
}
ServletActionContext.getRequest().setAttribute("allDepts", allDepts);
return "dept.show";
}
<s:if test="#request.allDepts!=null">
<ul>
<s:iterator value="#request.allDepts" var="dp">
<li>部门编号:${dp.deptno},部门位置:${dp.dname}</li>
</s:iterator>
</ul>
</s:if>
在所有的标签之中,判断和输出是我们最需要掌握的标签