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

时间:2013-09-23 01:09:19

标签: java hibernate jsp struts2

我是Struts2和Hibernate的新手。我想创建一个下拉列表,如下所示[使用hibernate和struts]动态弹出一个菜单,当选择一个id时,它会显示该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 ...
}

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

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

所以,现在我该如何实现studentpage.jsp。你能告诉我必要的代码或参考吗

谢谢。

2 个答案:

答案 0 :(得分:0)

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

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>

答案 1 :(得分:0)

Struts2的工作方式

调用方法时,该方法必须仅返回String结果。 String结果映射到struts.xml中以返回特定结果(在您的情况下是JSP)。

要从JSP访问Action数据,您需要访问要读取的字段的Getters。 任何IDE都可以为你编写Getters和Setters。如果您正在使用Eclipse, ALT SHIFT S 然后 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;
    }
}

在你的Action中,你应该使用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>