This is what I have in my action class code:
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";
}
I know the object is passed into the valuestack when the "Details" action is call as I can iterate "listPerson" in my JSP as such
<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>
But my problem is I want to pass it into a common nested jsp without directly calling it with the name "listPerson"
as this jsp be used through out my application
I have tried the following
main.jsp
<s:include value="sub.jsp">
<s:param name="listResult" value="listPerson">
</s:include>
sub.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>
It is not working, I am trying to set a variable "listResult" to reference "listPerson" and iterate it in the sub.jsp.
UPDATE:
To clarify why I am doing this is because I want to reuse sub.jsp twice within main.jsp to avoid duplicate coding with only trivial differences such as a different variable name of a list.
I was able to solve my problem as such
<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>
I think it works because the jsp is generated top down and variable "listResult" is set another value before sub.jsp is rendered again. Correct me if I am wrong and please let me know if there are any issues with this method or if you propose a better solution.