s2标签库不依赖于任何表现层技术,
strtus2提供的大部分标签,可以在各种表现层技术中使用。
使用s2之前需要用在页面中引入s2标签库:
<%@ taglib uri="/struts-tags" prefix="s"%>
这需要把struts2相关的jar包 放在工程的WEB-INF/lib/下面 .如:
struts2-core-2.0.11.1.jar
ognl-2.6.11.jar
oro-2.0.8.jar
freemarker-2.3.8.jar
struts-core-1.3.5.jar
1、<s:property>
<s:property value="#request.plType.plName">
<select name="myList">
<s:iterator value="#request.plType">
<option value="plID">
<s:property value="plName"/>
</option>
</s:iterator>
</select>
这实现了一个下拉框
解释:
<s:iterator>里的value属性表示要迭代的容器,这有点像foreach循环(for(int i:int [] a) a表示要循环的容器, 这是一个int型数组,前面的i表示数组中的元素)
#request明确表示,在request中搜索 键值是 plType的对象,我们假设 plType对应的是一个List<Subplate>
我理解迭代就是把容器中的内容,一个一个输出来,做一个遍历,这里plType对应的容器有多少个元素,页面就有多少个<option>
我想实现的功能是选择不同的项,传回不同的值 , 但是上面的写法是错误的
<select> <option></option> </select> 是固定组合, 用来实现下拉框
option的子节点就是显示在页面上的内容, 上面代码中,子节点是动态生成的,他表示#request.plType容器里装的一条元素 的 plName属性。
在s2标签中的value属性值通常表示一个key,而不是他本来的字符串
option的value属性就是你选择一项所对应的值,这里写成plID,其实所有选项带回的值都是plID,这是静态的, 正确的写法是
<select name="myList">
<s:iterator value="#request.plType">
<option value="<s:property value='plID'/>">
<s:property value="plName"/>
</option>
</s:iterator>
</select>
表单元素的name属性很重要,一般做提交是,每个表单元素都是像上面那样以键值对的形式传给服务器, name就是KEY