これはStruts2 の動作方法ではありません。
メソッドを呼び出す場合、そのメソッドは文字列の結果のみを返す必要があります。その文字列の結果は struts.xml にマップされ、特定の結果 (この場合は JSP) を返します。
JSP から Action データにアクセスするには、読み取りたいフィールドの Getter にアクセスする必要があります。Getter と Setter を作成できる IDE はどれでもあります。Eclipse を使用している場合は、ALTSHIFTSきっとR役に立ちます。
また、OOP (オブジェクト指向プログラミング) が示唆するように、オブジェクトを使用してデータを運ぶ/送信する必要があります(それぞれの呼び出しを行うfindStudents()
代わりに)。findIds()
id
次に、このような Student オブジェクトを想定します
public class Student {
private Long id;
private String name;
private Integer age;
/* GETTERS (or ACCESSORS) */
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
/* SETTERS (or MUTATORS) */
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
アクションでは、もちろんゲッター/セッターを使用してそれらのプライベートリストを宣言し、呼び出されたメソッドでそれを評価する必要があります。
private List<Student> students;
public List<Student> getStudents(){
return students;
}
public void setStudents(List<Students> students){
this.students = students;
}
public String findStudents(){
students = getMyServiceDaoOrSomething().findAllStudents();
return "success";
}
のような設定で
<action name="students" class="..." method="findStudents">
<result>studentpage.jsp</result>
</action>
<result>
が等しいことに注意してください<result name="success">
(これを Intelligent Default と呼びます) 。method
が指定されていない場合は、execute()
メソッドが実行されます。
次に、JSP で結果を反復処理し、各Student
オブジェクトを一度に出力します。
<s:iterator value="students">
<s:hidden name="id" />
<s:textfield name="name" />
<s:property value="age" />
</s:iterator>