简介
- el表达式${属性}取值顺序:request>>Context>>Root
<s:XX>
标签下的action,直接使用action名即可,不需要上下文路径和命名空间.<s:from>
表单具有自动回写功能.
1.通用标签
1. 判断
<s:if test="条件">执行体</s:if>
<!--num存于Context下的request中-->
<% request.setAttribute("num", 100); %>
<s:if test="#request.num>50">大于50</s:if>
<s:else>小于50</s:else>
2.循环
- 自行循环(val=索引)
<s:iterator begin="0" end="10" step="1" var="索引">
<!--循环输出-->
<s:iterator begin="1" end="10" step="2" var="index">
<s:property value="#index"/>
</s:iterator><br/>
<!--输出1 3 5 7 9-->
- 有值的循环(方式2 val=元素)
<% request.setAttribute("arr",new Integer[]{11,22,44,66,77}); %>
<!--方式1-->
<s:iterator begin="0" end="10" step="1" var="index">
${arr[index]}
</s:iterator><br/>
<!--方式2-->
<s:iterator value="#request.arr" var="val">
<s:property value="#val"/>
</s:iterator>
<!--输出11 22 44 66 77 -->
3.超链接
<s:a action="" namespace="">XXX</s:a>
1. namespace=命名空间
2. action=action名
3. 在超链接中加入<s:param>
标签,可以添加参数
<!--访问 域名/上下文路径/myPKG/123.action-->
<s:a action="123" namespace="myPKG">XXX</s:a>
<!--在网页上输出 XXXmyPKG/123.action -->
<s:url action="123" namespace="myPKG">XXX</s:url>
<!--添加参数 employee.id,值为Content容器的#employee.id-->
<s:a action="XXX"><s:param name="employee.id" value="#employee.id"/>删除</s:a>
2.表单标签
- 普通框
隐藏框: <s:hidden name="XX" value="XX"/>
小文本框: <s:textfield name="XX" value="XX"/>
密码框: <s:password name="XXX"/>
大文本框: <s:textarea name="xxx"/>
提交框: <s:submit name="xxx"/>
重置框: <s:reset name="XXX"/>
- 单选,复选,下拉
- headerKey=”null” ;下拉框的默认值
- headerValue=”请选择”;下拉框的默认视图
- multiple=”true”;下拉框展开
方式1:传入#{Key:Value, Key:Value} key等价于每个选项的id,value等价于每个选项的文本内容
单选框
<s:radio name="XXX" list="#{'1':'选项1','2':'选项2'}"></s:radio>
复选框
<s:checkboxlist name="XXX" list="#{'1':'选项1','2':'选项2'}"/>
下拉框
<s:select name="XXX" list="#{'1':'选项1','2':'选项2'}"/>
方式2:传入一个list(且list中都是对象)
- listKey=”id” :表示每个选项的id,是每个对象的id
- listValue=”name”:表示每个选项的文本,是每个对象的文本
Action类响应发送一个list
ActionContext ctx = ActionContext.getContext();
List<Hobby> list =new ArrayList<>();
list.add(new Hobby(1L, "篮球"));
list.add(new Hobby(2L, "乒乓球"));
list.add(new Hobby(3L, "足球"));
list.add(new Hobby(4L, "排球"));
ctx.put("list", list);
jsp
单选框
<s:radio name="XXXX" list="#list" listKey="id" listValue="name"/>
复选框
<s:checkboxlist name="XXXX" list="#list" listKey="id" listValue="name"/>
下拉框
<s:select name="XXXX" list="#list" listKey="id" listValue="name"/>
3.自动回写功能(将对象存入Root中)
- Action类中传递对象
- hobbys,复选框的内容(传入Context)
- jobs, 下拉框的内容(传入Context)
- user, 要回写的对象(传入Root)
//全局变量,将user对象传入Root
private User user=new User("Armo", 11, new Hobby(1L, "篮球"), "man", new Job(1L, "java"));
public User getUser() {
return user;
}
//方法体
//hobbys
List<Hobby> hobbys=new ArrayList<>();
hobbys.add(new Hobby(1L, "篮球"));
hobbys.add(new Hobby(2L, "足球"));
//jobs
List<Job> jobs=new ArrayList<>();
jobs.add(new Job(1L, "java"));
jobs.add(new Job(2L, "C++"));
//放入Context
ActionContext ctx = ActionContext.getContext();
ctx.put("jobs", jobs);
ctx.put("hobbys", hobbys);
JSP中
name=”属性”
姓名:<s:textfield name="user.name"/></br>
年龄:<s:textfield name="user.age"/>
爱好:<s:checkboxlist name="user.hobby.id" list="#hobbys" listKey="id" listValue="name"/><br/>
性别:<s:radio name="user.sex" list="#{'man':'男','girl':'女'}" ></s:radio><br/>
工作:<s:select name="user.job.id" list="#jobs" listKey="id" listValue="name"/>
显示结果