我在jsp中有以下选择列表:
<td>
<s:select list = "models"
listValue = "modelName"
listKey = "modelId"
multiple = "true"
name = "models" />
</td>
我选择使用display Tag
库实现分页,因此我想在显示列中对其进行转换,并从列表中显示一个或多个模型。我怎样才能做到这一点?下面是我的显示表和其他列:
<display:table name = "cars"
requestURI = "/listCar.action"
pagesize = "10">
<display:column property = "name" title = "name" />
<display:column titleKey = "models" >
<!--------------model list?-------------->
</display:column>
<display:column property = "year" title = "year" />
</display:table>
答案 0 :(得分:4)
首先,您需要让DisplayTag在您可以访问的上下文中推送值:
Implicit objects created by table
如果添加了id
属性,则表标记会生成对象 对应于页面上下文中可用的给定行,以便您 可以在scriptlet代码或其他标签中使用它。另一个暗示 table标记公开的对象是行号,名为id_rowNum
。这些对象在页面范围中保存为属性(您可以 使用
pageContext.getAttribute("id")
)访问它。他们也是 定义为嵌套变量(可使用<%=id%>
访问),但仅限于 id atribute的值不是运行时表达式。该 获取值的首选方法是始终使用pageContext.getAttribute()
。如果未指定id属性,则不会添加任何对象 table标签
的pageContext
然后,您需要访问该上下文。在Struts2中,pageContext
可通过#attr
获得:
Struts 2 Named Objects
#attr['foo']
或#attr.foo
访问
PageContext
(如果有),否则分别搜索request
/session
/application
所以代码是:
<display:table id = "currentRowInPageContext"
name = "cars"
requestURI = "/listCar.action"
pagesize = "10">
<display:column property = "name" title = "name" />
<display:column titleKey = "models" >
<s:select list = "%{#attr.currentRowInPageContext.models}"
listValue = "modelName"
listKey = "modelId"
multiple = "true"
name = "models" />
</display:column>
<display:column property = "year" title = "year" />
</display:table>
然而,现在有比DisplayTag更好的选择,例如jQuery DataTables和jQuery jqGrid;对于后者,还有一个插件(struts2-jquery-grid-plugin)可以帮助您使用网格而不需要知道它的语法,只需知道struts2标签。