Struts2 迭代器如何让它工作? [英] Struts2 iterator how to get it to work?

查看:26
本文介绍了Struts2 迭代器如何让它工作?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用 Struts2 标记在 JSP 中显示值.正在调用方法,但未显示任何结果.它在控制台中打印出我需要的所有数据,但不在 JSP 中.

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.

我调用 localhostlistAddCompany.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.

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.

当然,如果您首先调用将结果返回给 JSP 的操作,这将起作用.在某些情况下,如果堆栈上有 validationworkflow 拦截器,即使没有执行任何操作,您的操作类也应该填充集合.

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.

例如,如果在提交表单后出现验证错误并且返回 input 结果.在这种情况下,您可以让您的操作类实现 Preparable 并将代码移动到那里填充列表.

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;
}

Company 类也应该有 getter 和 setter.

The Company class should also have getters and setters.

在 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 迭代器如何让它工作?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆