0

一开始,我使用 struts2、java 和 javascript 来完成我的工作。我将问题概述如下。

我的页面上有下表 -

___________________________
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参数)

如果这听起来有点令人困惑,我深表歉意,但请帮忙!

4

1 回答 1

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 中还是在装饰器中。)
  • 迭代器标签将迭代对象推送到值堆栈上,无需直接按名称引用它。这个有点不确定。这取决于您的需求。
  • 在现实生活中,我可能会将整个组事物放入单独的 JSP 或自定义标记中。
于 2012-09-10T11:46:45.030 回答