2013-04-10 94 views
1

我使用Struts2的作为MVC框架,但我有一个问题,我的问题是在行动中,我定义 一个模型,它被称为“公司”,其定义如下:显示列表

class Company 
{ 
    private String name; 
    private String address; 
    ... 
    private List<Staff>staffs; 
    ... 
} 

class Staff 
{ 
    private String name; 
    private int age; 
    .... 
} 

行动是如下

class Action 
{ 
    private Company company; 
    public String execute(){ 

    } 
} 

如何显示整个公司,并考虑工作人员的信息(视图是JSP文件),我预计在UI是:

Company info 
    company name    company address... 
Staff 1 info 
    staff name     staff age... 
Staff 2 info 
    staff name     staff age... 

如何定义JSP文件?即使公司的信息可以通过使用OGNL来显示,但如何对员工的信息,因为它是一个List和它的数量是不确定的

有人告诉我,我可以使用迭代器,但我的要求是: 除了显示UI员工信息来源,我也希望让员工可以编辑,例如也许我将定义为“形式”以下

<s:form> 
    Company info: Company Name:<s:input name="company.name"/> Company Address:<s:input name="company.name"/> 
    Staff 1 info: .... 
    Staff 2 info: ... 
<s:form> 

是否有可能定义与人员信息“形式”还是“输入”?

回答

1

您可以指向列表或地图指定其索引的元素IteratorStatus对象:

<s:property value="company.name"/> 
<s:property value="company.address"/> 

<s:iterator value="company.staffs" status="stat"> 

    <span>Staff <s:property value="%{#stat.index}" /> info: </span> 

    <label>name: </label> 
    <s:textfield name="company.staffs[%{#stat.index}].name" /> 

    <label>age: </label> 
    <s:textfield name="company.staffs[%{#stat.index}].age" /> 

    <br/> 

</s:iterator> 
+0

是的,这正是我所期望的,谢谢,顺便说一下,你可以推荐任何教程如何在这种情况下使用OGNL?例如在列表,地图或任何其他常用的Java数据结构 – Chailie 2013-04-10 08:30:25

+0

@Chailie在维基上有一些[例子](https://cwiki.apache.org/WW/iterator-tag-examples.html),但它们很少;) – 2013-04-10 09:17:47

+0

对不起@Chailie,没有。但是对于字符串键(地图),它们总是与数字索引(列表),[[%%##stat.index}']'相同......'[%{#stat.index}]。随意挖掘我的OGNL和Struts2标记的问题(我的个人资料 - >标签 - >点击标签 - >浏览答案),也许你会发现一些有趣的东西:) – 2013-04-10 09:24:28

1

您可以使用Struts2的Iterator tag到迭代器在列表并显示你的JSP网页上的所有信息

迭代器遍历整个值。可迭代值可以是以下任何值:java.util.Collection, java.util.Iterator

有关更多详细信息,请参阅迭代器tag example

1

为了获得该公司的名称和地址只是做

<s:property value="company.name"/> 
<s:property value="company.address"/> 

而获得的员工使用struts iterator标签列表

<s:iterator value="company.staffs" status="stat"> 
    Staff <s:property value="%{#stat.index}" /> 
     <s:property value="name" /> &nbsp; <s:property value="age" /> 
     </br> 

</s:iterator> 
+0

除了显示UI中的工作人员信息外,我也希望让工作人员可以可编辑,例如 也许我会将“form”定义如下 ' 公司信息: 公司名称:公司地址: 工作人员1资讯: .... 人员2名信息: ... ' 是否可以定义与工作人员信息 “形式” 或 “输入”? – Chailie 2013-04-10 05:39:21

+0

是的,你可以通过使用标签来做到这一点。 – Deepak 2013-04-10 08:32:33