Struts2 迭代器如何让它工作?
Struts2 iterator how to get it to work?
我正在使用 Struts2 <iterator>
标签来显示 JSP 中的值。
正在调用方法,但未显示任何结果。它在控制台中打印我需要但不在 JSP.
中的所有数据
我打电话给localhost\listAddCompany.php
我做错了什么?
这是方法
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>
这是我的
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。
当然,如果您首先调用 returns 结果到 JSP 的操作,这当然会起作用。在某些情况下,如果堆栈上有 validation
和 workflow
拦截器,即使没有执行任何操作,您的操作 class 也应该填充集合。
例如,如果在提交表单后出现验证错误并返回 input
结果。在这种情况下,您可以使您的操作 class 实现 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
class 也应该有 getter 和 setter。
在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>
我正在使用 Struts2 <iterator>
标签来显示 JSP 中的值。
正在调用方法,但未显示任何结果。它在控制台中打印我需要但不在 JSP.
我打电话给localhost\listAddCompany.php
我做错了什么?
这是方法
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>
这是我的
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。
当然,如果您首先调用 returns 结果到 JSP 的操作,这当然会起作用。在某些情况下,如果堆栈上有 validation
和 workflow
拦截器,即使没有执行任何操作,您的操作 class 也应该填充集合。
例如,如果在提交表单后出现验证错误并返回 input
结果。在这种情况下,您可以使您的操作 class 实现 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
class 也应该有 getter 和 setter。
在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>