Struts2,转换s:选择列表以显示Tag列

时间:2016-04-19 07:23:00

标签: java jsp struts2 displaytag pagecontext

我在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>

1 个答案:

答案 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 DataTablesjQuery jqGrid;对于后者,还有一个插件(struts2-jquery-grid-plugin)可以帮助您使用网格而不需要知道它的语法,只需知道struts2标签。