【问题标题】:Struts 2 display tagsStruts 2 显示标签
【发布时间】:2025-12-14 00:15:02
【问题描述】:

我有一个 JSP,它在下面标记了 resultsList 中的数据在某些操作中输入并转发到下面的 jsp 这里我想根据复选框选择将数据返回到其他操作中。请帮忙,可以使用 Struts1,但自从开始使用 Struts2 后就不想再回到 Struts1。

<display:table class="displaytag" id="row" style="font-size:1.4em;" name="resultsList" requestURI="/SomePath.action">
  <display:column property="businessType" title="Business Type"></display:column>
  <display:column property="structure" title="Structure"></display:column>
  <display:column property="tradeSubType" title="Trade Sub Type"></display:column>
  <display:column property="businessGroup" title="Business Group"></display:column>
  <display:column title="Select To Copy" align="center">
    <s:checkbox name="selectToCopy" fieldValue="false" value="false" label="Check Me To Download"></s:checkbox>
  </display:column>
</display:table>

数据将在一个动作中获取并转发到jsp,其中jsp包含上面的显示标签,现在我需要提交表单,动作应该收到检查的信息以进一步处理。非常感谢这里的任何帮助,毫无疑问,我可以使用 Struts1 做到这一点,但我想继续使用 Struts2。

【问题讨论】:

  • 不清楚。您在任何地方都没有表格。
  • 我有表单,当我提交时,我在模型对象中只获得复选框值作为真或假,而不是我期望模型对象中的所有其他属性值。
  • 使用隐藏字段。
  • 嗨,Aleksandr M,我绝对尝试过使用隐藏字段,但我无法获取值,所以我只是按照以下方式进行操作,我无法发布答案,不知道该网站是否接受发布答案,但是我所做的小sn-p如下所示。WORKS
  • 嗨 bedr,我绝对尝试过使用隐藏字段,但我无法获取值,所以我只是按照以下方式进行操作,我无法发布答案 不知道该网站在发布时是否接受答案,但是我所做的它的小sn-p如下所示。 仅使用 hidden 无法获取值,因此获取的值如上。

标签: struts2 displaytag


【解决方案1】:

我猜你的动作类从这种类型发送了一些域对象:

public class MyData {
    private Integer id;
    private String businessType;
    //other params
    //getter/setters
}

在访问 displaytag jsp 页面之前调用的动作类有一个对象列表,表单类型为MyData

public class MyDisplayTagAction extends ActionSupport {
    private List<MyData> myDataList;
    //other params
    //getter/setter
    public String execute() {
        myDataList = getMyDataListFromSomewhere();
        return SUCCESS;
    }
}

JSP 应该包含一个表单和一个提交按钮。此外,您必须将要发回的每个数据定义为该表单中的字段。如果不允许用户更改它们,请使用隐藏字段。 #attr.row.id 访问将该 id 打印到值。 #attr 是从 ognl 访问从 displaytag 定义的变量 row。 (欲了解更多信息:Struts OGNL

<s:form action="myStrutsPostAction" method="post">
    <display:table name="myDataList" uid="row">
        <display:column>
            <s:checkbox name="resultsList[%{#attr.row_rowNum - 1}].selectToCopy" id="check%{#attr.row_rowNum - 1}" value="%{#attr.row.selectToCopy}"/>
        </display:column>
        <display:column>
            <input type="hidden" name="resultsList[<s:property value='%{#attr.row_rowNum - 1}'/>]" value="<s:property value='%{#attr.row.businessType}' />"/>
            <s:property value="%{#attr.row.businessType}"/>
        </display:column 
    </display:table>
    <s:submit>
</s:form>

post action 类(接受表单请求的那个)应该包含一个列表,它在&lt;s:form&gt; 中定义,struts 只会将数据设置到这个列表中。

public class MyPostAction extends ActionSupport {
    private List<MyData> resultsList = new ArrayList<>();
    //getter/setter
}

【讨论】:

  • 感谢 Beendr 的回复。在这里,我必须将所有列数据发送到操作。但是,我将复选框值设置为 true 或 false,但我无法将其他字段值获取到操作中。我的屏幕有 10 条记录,这些记录使用分页显示,当我提交带有 1 或 2 个复选框的表单时,我得到所有 10 条记录各自的模型对象,但只有复选框值为 true 或 false,但没有获取所有值模型的其他属性。
  • 感谢 Beendr 的回复。在这里,我必须将所有列数据发送到操作。我将复选框值设置为 true 或 false,但我无法将其他属性值发送到操作。我的屏幕有 10 条记录,使用分页显示,当我提交带有 1 或 2 条检查的表单时,我正在获取所有 10 条记录各自的模型对象,但仅复选框值为真或假,但没有获取所有其他属性的值模型。这里要提一点的是,我没有要根据选择执行操作的 ID,而是需要记录数据。谢谢。
  • 除了上面的代码之外,我还做了一些修改,将复选框的值设置为真或假,以便从动作类中的模型中获取值。 以同样的方式我试图获取其他属性值但我不能。
  • 嘿@bharath,我改变了答案。也许您可以尝试隐藏字段。但是将所有数据发送回服务器有点不寻常,您应该考虑只传输用户真正能够更改的数据。
  • 嗨 bedr,我绝对尝试过使用隐藏字段,但我无法获取值,所以我只是按照以下方式进行操作,我无法发布答案 不知道该网站在发布时是否接受答案,但是我所做的它的小sn-p如下所示。