2

这就是我的动作类代码中的内容:

private List<PersonDO> listPerson;

public void setListPerson(List<PersonDO> listPerson) {
    this.listPerson = listPerson;
}

public List<PersonDO> getListPerson() {
    return listPerson;
}

public String Details() {
   PersonDO personDO = new PersonDO()
   personDO.setName("Bob");
   personDO.setAge("20");
   
   this.listPerson = new ArrayList<PersonDO >();
   this.listPerson.add(personDO)

   return "success";
}

我知道当调用“详细信息”操作时对象被传递到值堆栈中,因为我可以在我的 JSP 中迭代“listPerson”

<s:iterator value="listPerson" status="rowSts" var="mapItem">
   <td style="vertical-align:middle;"><s:property value="#mapItem.name" /></td>
   <td style="vertical-align:middle;"><s:property value="#mapItem.age" /></td>
</s:iterator>

但我的问题是我想将它传递到一个通用的嵌套 jsp 中而不直接用名称调用它,"listPerson"因为这个 jsp 将在我的应用程序中使用

我试过以下

主.jsp

<s:include value="sub.jsp">
    <s:param name="listResult" value="listPerson">
</s:include>

子.jsp

<%pageContext.setAttribute("listResult" , request.getParameter("listResult")); %>
<s:set var="listResult" value="%{#attr.listResult}"/>


 <s:iterator value="listPerson" status="rowSts" var="mapItem">
      <td style="vertical-align:middle;"><s:property value="#mapItem.name" /></td>
      <td style="vertical-align:middle;"><s:property value="#mapItem.age" /></td>
 </s:iterator>

它不起作用,我试图设置一个变量“listResult”来引用“listPerson”并在 sub.jsp 中对其进行迭代。

更新:

为了澄清我这样做的原因是因为我想在 main.jsp 中重复使用 sub.jsp 两次,以避免重复编码,只有微不足道的差异,例如列表的不同变量名。

我能够解决我的问题

<c:set var="listResult"  value="${listPerson}"  scope="request"/>
<s:include value="sub.jsp">
    <s:param name="shortlist">true</s:param>
</s:include>

<c:set var="listResult"  value="${listCompany}"  scope="request"/>
<s:include value="sub.jsp">
    <s:param name="shortlist">true</s:param>
</s:include>

我认为它可以工作,因为 jsp 是自上而下生成的,并且在 sub.jsp 再次呈现之前,变量“listResult”被设置了另一个值。如果我错了,请纠正我,如果此方法有任何问题或者您提出更好的解决方案,请告诉我。

4

1 回答 1

0

您正在尝试创建一个请求范围变量并从包含的页面访问它。它可能是访问请求范围参数的替代方法。

请注意,参数仅作为请求参数访问:

参数作为请求参数传递,因此使用 ${param.ParamName}符号来访问它们。不要使用s:property 标签访问包含文件中的参数。

为什么不使用值堆栈并在包含的页面中从迭代器中推送要访问的参数?

<s:push value="listPerson">
  <s:include value="sub.jsp">
    <s:param name="shortlist">true</s:param>
  </s:include>
</s:push>

<s:push value="listCompany">
  <s:include value="sub.jsp">
    <s:param name="shortlist">true</s:param>
  </s:include>
</s:push>

如果您需要两个列表作为参数,您可以同时推送(一个接一个)。值堆栈不受其大小的限制。

于 2016-12-21T22:45:32.023 回答