可能会在多个主题中询问此问题......但无法正确回答
Java Bean
package com.example;
public class Document {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
如下所示的JavaBean的ArrayList创建
package com.example;
import java.util.ArrayList;
public class classdocs {
public ArrayList getData() {
ArrayList docsmx = new ArrayList();
Document d1 = new Document();
d1.setName("user.doc");
Document d2 = new Document();
d2.setName("office.doc");
Document d3 = new Document();
d3.setName("transactions.doc");
docsmx.add(d1);
docsmx.add(d2);
docsmx.add(d3);
return docsmx;
}
}
行动类
package com.example; import java.util.ArrayList;
import com.opensymphony.xwork2.ActionSupport;
public class FetchAction extends ActionSupport {
private String username;
private String message;
private ArrayList docsmx = new ArrayList();
public ArrayList getDocuments() {
return docsmx;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String execute() {
classdocs cx = new classdocs();
if( username != null) {
docsmx = cx.getData();
return "success";
} else {
message="Unable to fetch";
return "failure";
}
}
}
使用Struts2 Iterator标记的Jsp
Documents uploaded by the user are:</br>
<s:iterator value="docsmx">
<s:property value="name" /></br>
</s:iterator>
问题为什么迭代时不显示包含JavaBean的Bucket的ArrayList ...
我做错了什么?
问候 KARTHIK答案 0 :(得分:1)
根据您的版本,您应该为docsmx
(首选,pre-S2.1.mumble)提供getter,或者将docsmx
公开(不是首选,S2.1 +)。
或者,根据您的代码,使用正确的getter:
<s:iterator value="documents">
<s:property value="name" /></br>
</s:iterator>
一些注意事项:documents
应该被宣布为List
,而不是ArrayList
,尽管在这种情况下几乎肯定无关紧要。但是,当实现无关紧要时,接受编码到接口是个好习惯。
我还考虑稍微收紧一下代码:
public String execute() {
if (username == null) {
message = "Unable to fetch";
return "failure";
}
docsmx = cs.getData();
return "success";
}
这允许更自然的阅读,使两个状态(成功和失败)更清晰,使它们保持非常独特,并且稍微缩短。