这就是我的动作类代码中的内容:
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”被设置了另一个值。如果我错了,请纠正我,如果此方法有任何问题或者您提出更好的解决方案,请告诉我。