我正在使用Struts2 <iterator>标记在JSP中显示值。方法被调用,但未显示任何结果。它在控制台中打印我需要的所有数据,但不在JSP中打印。
<iterator>
我打电话 localhost\listAddCompany.php
localhost\listAddCompany.php
我做错什么了?
这是方法
listAllCompanys() :
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 :
struts.xml
<action name="listAddCompany" class="com.handyman.web.CompanyManagementAction" method="listAllCompanys"> <result name="success">companyAddUpdate.jsp</result> </action>
这是我的
companyAddUpdate.jsp :
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>
迭代器标签会迭代标签主体内的所有内容。由于您的迭代器标记主体为空,因此未显示任何结果。对于需要数据才能工作的迭代器和其他struts标记,您应该填充value属性中使用的集合,并为变量提供getter。
value
当然,如果您首先调用将结果返回给JSP的操作,那么它将起作用。在某些情况下,如果堆栈上有validation和workflow拦截器,则即使没有执行任何操作,动作类也应填充集合。
validation
workflow
例如,如果提交表单后您遇到验证错误并input返回结果。在这种情况下,您可以使您的动作类得以实现Preparable并在其中填充代码。
input
Preparable
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; }
该Company级也应该有getter和setter方法。
Company
在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>