hibernate 如何使用Struts2显示从数据库到jsp页面的所有行?

kiayqfof  于 2022-11-14  发布在  其他
关注(0)|答案(2)|浏览(202)

我是Struts2和Hibernate的新手。我想创建一个下拉列表,如下所示[使用Hibernate和Struts],它会动态弹出一个菜单,当选择一个id时,它会显示该id的所有信息:
我费了很大劲才做到这一点。但失败了。有谁能帮帮我吗?
我有一张学生桌,就像这样:

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

使用Hibernate,我创建了模型和道像…学生模型和学生DAO
在DAO中,我实现了一个返回ID列表的方法,如下所示:

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

现在,我将操作定义为struts.xml文件,如下所示:

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

那么,现在我该如何实现StudentPage.jsp。你能告诉我做这件事所需的代码或参考资料吗
谢谢。

qeeaahzv

qeeaahzv1#

如果您的列表是这样的: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<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>
s6fujrry

s6fujrry2#

这不是Struts2的工作方式。
调用方法时,该方法必须仅返回字符串结果。该字符串结果被Map到struts.xml中,以返回特定的结果(在您的例子中,是一个JSP)。
要从JSP访问Action数据,您需要访问您想要读取的字段的getter。现有的任何IDE都能够为您编写getter和setter。如果您使用的是Eclipse、ALTSHIFTS和R,那么肯定会有所帮助。
此外,就像OOP(面向对象编程)建议的那样,您应该使用对象来承载/传输数据,使用类似findStudents()的方法(而不是findIds(),然后调用每个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/setters,并在名为:

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>

相关问题