Reputation: 127
I am using Struts2 <iterator>
tag to display value in JSP.
Method is getting called, but no results were displayed. It prints in console all the data that I need but not in JSP.
I call localhost\listAddCompany.php
What did I do wrong?
Here's the method
listAllCompanys()
:
private List<Company> listAllCompanys;
Getters and setters...
public String listAllCompanys() throws Exception {
CompanyDaoHibernate dao = new CompanyDaoHibernate();
listAllCompanys = dao.getListOfCompanies();
System.out.println("Printing from CompanyManagmentAction...");
return SUCCESS;
}
struts.xml
:
<action name="listAddCompany" class="com.handyman.web.CompanyManagementAction"
method="listAllCompanys">
<result name="success">companyAddUpdate.jsp</result>
</action>
and here is my
companyAddUpdate.jsp
:
<h1>Add / Update Company</h1>
<s:form action="newCompany">
<!-- // id, Company_name, Address, Email, Website, Phone_number, Comment, Fax -->
<s:actionerror/>
<s:textfield name="company.companyName" label="Company's name" />
<s:textfield name="company.address" label="Address" />
<s:textfield name="company.email" label="Email" />
<s:textfield name="company.website" label="Website" />
<s:textfield name="company.phoneNumber" label="Phone Number" />
<s:textfield name="company.comment" label="Comment" />
<s:textfield name="company.fax" label="Fax" />
<s:submit value="Register" />
</s:form>
<h2>Contacts</h2>
<s:iterator value="listAllCompanys" var="company">
</s:iterator><table>
<tbody><tr>
<th>Company's name</th>
<th>Address</th>
<th>Email</th>
<th>Website</th>
<th>Phone Number</th>
<th>Comment</th>
<th>Fax</th>
</tr>
<tr>
<td><s:property value="companyName"></s:property></td>
<td><s:property value="address"></s:property></td>
<td><s:property value="email"></s:property></td>
<td><s:property value="website"></s:property></td>
<td><s:property value="phoneNumber"></s:property></td>
<td><s:property value="comment"></s:property></td>
<td><s:property value="fax"></s:property></td>
</tr>
</tbody></table>
Upvotes: 0
Views: 3137
Reputation: 1
The iterator tag iterates everything inside the body of the tag. No results is displayed because your iterator tag body is empty. For the iterator and other struts tags that need data to work you should populate the collection that used in the value
attribute and provide a getter for the variable.
Of course this will work if you call the action first that returns a result to the JSP. In some cases if you have a validation
and workflow
interceptors on the stack your action class should populate the collection even if no action is executed.
For example, if after submitting a form you have validation errors and input
result is returned. In this case you can make your action class to implement Preparable
and move the code tho fill the list there.
public class CompanyAction extends ActionSupport implements Preparable {
private List<Company> listAllCompanys;
//Getters and setters...
public List<Company> getListAllCompanys() {
return listAllCompanys;
}
@Override
public void prepare() throws Exception {
CompanyDaoHibernate dao = new CompanyDaoHibernate();
listAllCompanys = dao.getListOfCompanies();
System.out.println("Populated listAllCompanys from " +getClass().getSimpleName()+ " size: " +listAllCompanys.size());
}
public String listAllCompanys() throws Exception {
System.out.println("The action " + ActionContext.getContext().getName()+ " is called");
return SUCCESS;
}
The Company
class should also have getters and setters.
In JSP:
<h2>Contacts</h2>
<table>
<thead>
<tr>
<th>Company's name</th>
<th>Address</th>
<th>Email</th>
<th>Website</th>
<th>Phone Number</th>
<th>Comment</th>
<th>Fax</th>
</tr>
</thead>
<tbody>
<s:iterator value="listAllCompanys">
<tr>
<td><s:property value="companyName"/></td>
<td><s:property value="address"/></td>
<td><s:property value="email"/></td>
<td><s:property value="website"/></td>
<td><s:property value="phoneNumber"/></td>
<td><s:property value="comment"/></td>
<td><s:property value="fax"/></td>
</tr>
</s:iterator>
</tbody>
</table>
Upvotes: 1