我无法使用h:dataTable获取表值。
请回复?
豆类:-
public class Employee implements Serializable{
private int eId;
private String eName;
private ResultSet viewEmployee;
public Connection getVConnection() throws Exception{
String driver = "oracle.jdbc.driver.OracleDriver";
String url = "jdbc:oracle:thin:@localhost:1521:globldb3";
String username = "scott";
String password = "tiger";
Class.forName(driver);
Connection conn = DriverManager.getConnection(url, username, password);
return conn;
}
public ResultSet getViewEmployee() throws Exception{
Connection conn = null;
PreparedStatement pstmt = null;
try {
conn = getVConnection();
String query = "select * from employee where e_id>?";
pstmt = conn.prepareStatement(query); // create a statement
pstmt.setInt(1,this.eId); // set input parameter
result = pstmt.executeQuery();
return result;
}finally {
try {
result.close();
pstmt.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
public String v2(){
try{
getViewEmployee();
return "view-employee-p.xhtml";
}catch(Exception e){
e.printStackTrace();
return "home.xhtml";
}
}
JSF第1页:-
<h:panelGrid columns="3" cellpadding="2" border="2" styleClass="panelGridColums"> Id
<h:inputText id="id" label=" " value="#{employee.eId}"
required="true" requiredMessage="Field cannot be left blank"
converterMessage="Not a valid id, id must be betwenn 1 and 9999." maxlength="4">
<f:convertNumber/>
</h:inputText>
<h:message for="id" styleClass="errorMessages" showDetail="false" showSummary="true"/>
</h:panelGrid>
<h:commandButton value="View" action="view-page.xhtml"/>
查看页面.xhtml:
<h:dataTable value="#{employee.viewEmployee}" var="e">
<h:column>
<f:facet name="header">Employee id</f:facet>
#{e.E_ID};
</h:column>
<h:column>
<f:facet name="header">Employee id</f:facet>
#{e.E_Name};
</h:column>
</h:dataTable>
提前谢谢。
您需要提供正常的 getter 和 setter 方法。EL 不会按字段访问属性,它只会通过 getter 访问它们,并且只会通过 setter 来改变它们。如果你懒于打字,你甚至可以让你的IDE(如Eclipse/Netbeans/IntelliJ)自动生成它们。
public class Employee {
private Integer id;
private String name;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
跟
<h:inputText value="#{employee.id}" />
和
<h:dataTable value="#{bean.employees}" var="employee">
<h:column>#{employee.id}</h:column>
<h:column>#{employee.name}</h:column>
</h:dataTable>
请注意,它是区分大小写的,应该遵循Javabeans规范规则。#{employee.id}
需要一个public Object getId()
方法(其中Object
是你想要的任何类型)。在您的示例中,您有#{employee.eId}
不可能有效。如果标识符public Object getEId()
的前两个字符是大写的,则应通过 #{employee.EId}
访问它。但毕竟,使用匈牙利语或前缀表示法是没有意义的。只需删除e
前缀即可。它使代码也更具自我记录性。
不要忘记相应地更改您的 JDBC 代码
preparedStatement.setInt(1, employee.getId());
和
Employee employee = new Employee();
employee.setId(resultSet.getInt("id"));
employee.setName(resultSet.getString("name"));
请注意,将ResultSet
作为方法返回值传递是一个坏主意。一旦在返回之前关闭它,您将无法再从中获取值。当你不关闭它时,那么你就会泄漏资源。您需要在与打开和关闭它的位置完全相同的方法块中处理它。在上面的例子中,只需执行return employee;
.
要了解如何开始使用基本 DAO,请查看这篇文章。