2012-09-10 30 views
0

首先,我使用struts2,java和javascript来完成我的工作。我已经概述了如下问题。在同一个隐藏变量struts2中传递同一类型的多个值

我下面的表格有我的网页上 -

___________________________ 
checkbox | phone | Name  
--------------------------- 
    []  | 123-456 | abcde 

    []  | 234-567 | testname 
____________________________ 

(这是一个轮廓,但留在我)

该表的代码如下:

<s:if test="reportFilter.huntGroups!=null && reportFilter.huntGroups.size()>0"> 
    <s:iterator var="huntGroupVO" value="reportFilter.huntGroups" status="huntGroupKey"> 
     <tr <s:if test="#huntGroupKey.odd">class="oddRows"</s:if>> 
     <td width="40px"><s:checkbox id="specHg_checkbox_%{#huntGroupKey.index}" name="reportFilter.selectedHuntGroups" fieldValue="%{#huntGroupVO.phoneNumber}" value="%{reportFilter.selectedHuntGroups!=null && reportFilter.selectedHuntGroups.contains(#huntGroupVO.phoneNumber)?true:false}" theme="simple"></s:checkbox></td> 
     <td> 
     <s:if test="#huntGroupVO.phoneNumber.length()>0"> 
      <s:property value="#huntGroupVO.phoneNumber"/> 
     </s:if> 
     <s:else> 
      <s:property value="#huntGroupVO.userGroupId"/> 
     </s:else> 
     </td> 

     <td class="hntName"><s:property value="#huntGroupVO.name"></s:property></td> 
    </tr> 
    </s:iterator> 
</s:if> 

很明显,当我勾选复选框时,我将电话号码作为值传递。 问题是,我也想通过这个名字。

据我所知,我们可以使用类似连字符的东西将它与电话号码一起传递。

假设我有另一个变量ArrayList<String> hiddenName,我想填充这个变量中勾选复选框的名称。 (我在想通过s:hidden参数)

我很抱歉,如果它听起来有点令人困惑,但请帮助!

回答

0

显然你只能在任何给定的表单域中传递一个值。

你有多种选择,从简单–使用一个字符串,分裂它来获得这两个值,通过中间–传递一个ID,并在Java中获取适当的值,到复杂的自定义–类型转换。

哪个最有意义取决于你的数据在哪里,如何你的数据,等等。


无关,但我发现,JSP很难看。我会重构一大笔钱。以下是未经测试的,但与代码审查后我期望的更接近。

<s:if test="reportFilter.showGroups"> 
    <s:iterator value="reportFilter.huntGroups" status="status"> 
    <tr> 
     <td> 
     <s:checkbox id="specHg_checkbox_%{#status.index}" theme="simple" 
        name="reportFilter.selectedHuntGroups" 
        fieldValue="phoneNumber" 
        value="%{reportFilter.hasNumber(phoneNumber)}" /> 
     </td> 

     <td> 
     <s:set var="num" value="${phoneNumber.length() > 0 ? phoneNumber : userGroupId" /> 
     <s:property value="#num"/> 
     </td> 

     <td class="hntName"><s:property value="name"/></td> 
    </tr> 
    </s:iterator> 
</s:if> 

值得注意的几件事情:

  • 逻辑来决定,如果我们将展示封装在Java的群体。也使测试更容易。
  • 迭代对象的合理,短名称:它是一个组(或huntGroup)。
  • 提取(电话号码||组ID)值,消除一堆JSP标签。
  • (理想情况下,逻辑将隐藏在Java中,无论是在VO中,还是在装饰器中。)
  • 迭代器标签将迭代对象压入值栈,不需要按名称直接引用它。这一个是多一点iffy;这取决于你的需求。
  • 在现实生活中,我可能会把整个组件放到一个单独的JSP或自定义标签中。
相关问题