如何在jsf中从数据表中获取数据索引?

如何在jsf中从数据表中获取数据索引?,jsf,datatable,Jsf,Datatable,我是JavaEE新手,对jsf和所有东西都不太了解。我正在制作一个简单的JavaWeb应用程序,它从数据库中获取数据并显示在dataTable中。我需要编辑用户从dataTable中选择的数据,我需要获取所选/单击行的值。但我一直没能做到。有人能帮我写代码吗?我希望有人能告诉我如何用我的以下代码做到这一点 showRecords.xhtml h:dataTable value="#{studentList.studentL()}" var="student" styleClass="stude

我是JavaEE新手,对jsf和所有东西都不太了解。我正在制作一个简单的JavaWeb应用程序,它从数据库中获取数据并显示在dataTable中。我需要编辑用户从dataTable中选择的数据,我需要获取所选/单击行的值。但我一直没能做到。有人能帮我写代码吗?我希望有人能告诉我如何用我的以下代码做到这一点

showRecords.xhtml

h:dataTable  value="#{studentList.studentL()}" var="student" styleClass="studentTable"
                         columnClasses=",,,fixedWidth">
                <h:column>
                    <f:facet name="header">Student ID</f:facet>
                    <h:outputText value="#{student.studentId}"></h:outputText>
                </h:column>

            <h:column>
                <f:facet name="header">Name</f:facet>
                <h:outputText value="#{student.fname}"></h:outputText>
            </h:column>
studentList.java

@ManagedBean(name="studentList")
@SessionScoped

public class studentList {
    public List<student> studentL(){

        List<student> list = new ArrayList<student>();
        PreparedStatement ps = null;
        ResultSet rs = null;
        Connection con = null;

        try{
           Class.forName("org.apache.derby.jdbc.ClientDriver");
           con = DriverManager.getConnection("jdbc:derby://localhost:1527/tourManager","administrator","pass");
           String sql = "Select * from student";
           ps = con.prepareStatement(sql);
           rs = ps.executeQuery();

           while(rs.next()){
           student student1 = new student();
           student1.setFname(rs.getString("FNAME"));
           student1.setLname(rs.getString("LNAME"));
           student1.setStudentId(rs.getString("STUDENTID"));
 list.add(student1);
         // return list;
           }

        }catch(Exception e){
            e.printStackTrace();
        }


        return list;

    }
public void editStudent() throws IOException{
        int index = Integer.parseInt(FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("index").toString());
        System.out.println(" the selected row is "+index);
    }  


}

可以使用表达式语言传递参数

在您的bean中,有如下函数

public void editStudent(String studentId)
{
  // do something with id
}
现在,使用表达式语言,您可以使用{yourbean.editStudent'id}调用该方法

由于使用datatable对数据进行迭代,因此可以从var变量访问学生id

<h:dataTable  value="#{studentList.studentL()}" var="student" ...>
...
    <h:commandButton value="Edit" action="#{studentList.editStudent(student.studentId)}" />
...
</h:dataTable>

表达式语言将从特定学生的studentId方法访问getStudentId getter方法。

此方法有多个副本。请搜索它们并将其作为标记。我知道这并没有给你任何声誉,但它保持了“干净”@BalusC:如果你用“选择”而不是“当前行”,这个副本不会直接出现。也许让Q更通用?我想试一试,但就是不行sure@Kukeltje:我明白了。
<h:dataTable  value="#{studentList.studentL()}" var="student" ...>
...
    <h:commandButton value="Edit" action="#{studentList.editStudent(student.studentId)}" />
...
</h:dataTable>