0

我是 Struts2 和 Hibernate 的新手。I want to create a drop-down list like the following [ using hibernate and struts] which pops up a menu dynamically and when an id will be selected, it shows all the information of that id:

我做了很多努力来做到这一点。但失败了。有人可以帮我吗:

我有一个像这样的“学生”表:

id  name  age
1...a.....20
2...b.....24
3...c.....22

使用 Hibernate,我创建了模型和 dao,例如... StudentModel 和 StudentDAO

在 DAO 中,我实现了一个返回 id 列表的方法,如下所示:

// StudentDAO.java
public List<String> findId(String id) {
    .....
    return ...
}

现在,我将 action 定义到 struts.xml 文件中,如下所示:

// Struts.xml
<action name="idSelection" class="..." method="findId">
    <result> studentpage.jsp </result>
</action>

那么,现在我该如何实现studentpage.jsp。请你告诉我必要的代码或参考来做到这一点

谢谢你。

4

2 回答 2

0

不是Struts2 的工作方式。

当您调用一个方法时,该方法必须只返回一个字符串结果。该字符串结果映射到您的 struts.xml 以返回特定结果(在您的情况下为 JSP)。

要从 JSP 访问 Action 数据,您需要访问要读取的字段的 Getter。任何 IDE 都可以为您编写 Getter 和 Setter。如果您使用的是 Eclipse,ALTSHIFTS那么R肯定会有所帮助。

此外,就像 OOP(面向对象编程)所建议的那样,您应该使用一个对象来携带/传输数据,使用类似的方法findStudents()(而不是findIds()然后调用 each id)。

假设像这样的学生对象

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

在您的操作中,您应该声明它们的私有列表,当然还有 getter/setter,并在名为的方法中对其进行评估:

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">(称为智能默认),method不指定时execute()会执行该方法。

然后在 JSP 中,迭代结果并Student一次打印每个对象:

<s:iterator value="students">
    <s:hidden name="id" />
    <s:textfield name="name" />
    <s:property value="age" />
</s:iterator>
于 2013-09-23T12:30:39.353 回答
0

如果你的列表是这样的:List<Student>studentList,而 Student 是

public class Student {
    private Long id;
    private String name;
    private String age;
    ...
    getter and setter...
}
request.setAttribute("studentList", studentList);

您可以实现 studentpage.jsp:

<table>
<s:iterator value="#request.studentList" status="status">
<tr>
    <td>
        <s:property value="name">
    </td>
    <td>
        <s:property value="age">
    </td>
</tr>
</s:iterator>
</table>

如果你像这样返回 List: List<List<String>>,你可以这样做:

<table>
<s:iterator value="#request.studentList" status="status" id="list">
<tr>
    <td>
        name:<s:property value="#list[#status.index][1]"/>
    </td>
    <td>
        age:<s:property value="#list[#status.index][2]"/>
    </td>
</tr>
</s:iterator>
</table>
于 2013-09-23T02:35:25.190 回答