【问题标题】:Struts2, convert s:select list to display Tag columnStruts2,转换s:select列表显示Tag列
【发布时间】:2016-04-19 07:22:59
【问题描述】:

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

【问题讨论】:

    标签: java jsp struts2 displaytag pagecontext


    【解决方案1】:

    首先,您需要让 DisplayTag 在您可以访问的上下文中推送值:

    Implicit objects created by table


    如果您添加和id 属性,则表格标记使对象 对应于页面上下文中可用的给定行所以你 可以在 scriptlet 代码或其他标记中使用它。另一个隐含的 表标签暴露的对象是行号,命名为id_rowNum

    这些对象被保存为页面范围内的属性(您可以 使用pageContext.getAttribute("id") 访问它)。他们也是 定义为嵌套变量(可使用 &lt;%=id%&gt; 访问),但前提是 id 属性的值不是运行时表达式。这 获取值的首选方法是始终使用 pageContext.getAttribute().

    如果不指定 id 属性,则不会将对象添加到 表标签的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 标记即可。

    【讨论】:

    • 伟大的 Andrea,它又一次工作了 ;) 好吧,我想解决这个问题,并从一开始就考虑尝试 jQuery DataTables 替代方案。
    • 是的,尝试在您的下一个空闲时间窗口中搜索它们(数据表和 jqgrid),它们比 displaytag 更新了 10 年,并且您可以在许多功能中清楚地看到它。
    猜你喜欢
    • 1970-01-01
    • 2014-08-24
    • 1970-01-01
    • 1970-01-01
    • 2013-01-16
    • 2012-02-06
    • 1970-01-01
    • 1970-01-01
    • 2019-11-07
    相关资源
    最近更新 更多