JSF Datatable不显示所有列表字段(列)
我想在JSF:DataTAble中显示一个表。我成功地将表从数据库检索到用户类型列表,其中“users”是我的pojo类。现在,我在数据表上显示它时遇到了问题,一些列,如FName、LName、Pwd,显示正确,但当我添加其他coulmns,如“Note”“Email”时,会出现此错误JSF Datatable不显示所有列表字段(列),jsf,datatable,Jsf,Datatable,我想在JSF:DataTAble中显示一个表。我成功地将表从数据库检索到用户类型列表,其中“users”是我的pojo类。现在,我在数据表上显示它时遇到了问题,一些列,如FName、LName、Pwd,显示正确,但当我添加其他coulmns,如“Note”“Email”时,会出现此错误 javax.servlet.ServletException: /dt.xhtml: Property 'Email' not found on type in.ali.pojo.users javax.
javax.servlet.ServletException: /dt.xhtml: Property 'Email' not found on type in.ali.pojo.users
javax.faces.webapp.FacesServlet.service(FacesServlet.java:659)
root cause
javax.el.ELException: /dt.xhtml: Property 'Email' not found on type in.ali.pojo.users
com.sun.faces.facelets.compiler.TextInstruction.write(TextInstruction.java:88)
com.sun.faces.facelets.compiler.UIInstructions.encodeBegin(UIInstructions.java:82)
com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeRecursive(HtmlBasicRenderer.java:302)
com.sun.faces.renderkit.html_basic.TableRenderer.renderRow(TableRenderer.java:385)
com.sun.faces.renderkit.html_basic.TableRenderer.encodeChildren(TableRenderer.java:162)
javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:894)
javax.faces.component.UIComponent.encodeAll(UIComponent.java:1856)
javax.faces.component.UIComponent.encodeAll(UIComponent.java:1859)
javax.faces.component.UIComponent.encodeAll(UIComponent.java:1859)
com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:443)
com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131)
com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:120)
com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:219)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:647)
这是我的xhtml页面
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets">
<h:head>
<title>Facelet Title</title>
</h:head>
<h:body>
<h:dataTable value="#{pretechDataTableBean.user}" var="users">
<h:column>
<f:facet name="header">Name</f:facet>
#{users.FName}
</h:column>
<h:column>
<f:facet name="header">Email</f:facet>
#{users.Email}
</h:column>
<h:column>
<f:facet name="header">Password</f:facet>
#{users.pwd}
</h:column>
</h:dataTable>
</h:body>
</html>
字段必须类似于此,而不是类似于此。只需将JSF代码更改为
名称
#{user.fName}
电子邮件
#{user.email}
密码
#{user.pwd}
并更新User
类中的字段名,以遵循正确的JavaBean命名约定
public class users implements java.io.Serializable {
private long userId;
private String fName;
private String lName;
private long userTypeId;
private String userName;
private String email;
private String pwd;
private String note;
private boolean isActive;
//constructor, getters and setters
}
除此之外,当前设计中还有其他缺陷:
- 您的托管bean的getter中不能有业务逻辑,而应该利用
方法初始化要使用的必要数据@PostConstruct
- 由于这个bean看起来应该在用户停留在同一视图时保持活动状态,因此最好将其修饰为
,而不是@ViewScoped
@RequestScoped
- 为类和字段使用专有名称。例如,如果您有一个
字段,请将变量命名为列表
或类似名称,以便代码是自解释的somethingList
@ManagedBean
@ViewScoped
public class PretechDataTableBean {
private List<users> userList;
public PretechDataTableBean() {
}
@PostConstruct
public void init() {
Session session = HibernateUtil.getSessionFactory().openSession();
Transaction transaction = null;
List<users> users =null;
try
{
transaction = session.beginTransaction();
users = session.createQuery("from users").list();
}
catch(Exception e)
{
e.printStackTrace();
}
finally{
session.close();
}
return users;
}
public List<users> getUserList() {
return this.user;
}
}
@ManagedBean
@视域
公共类PretechDataTableBean{
私有列表用户列表;
公共数据表bean(){
}
@施工后
公共void init(){
Session Session=HibernateUtil.getSessionFactory().openSession();
事务=空;
列表用户=null;
尝试
{
事务=session.beginTransaction();
users=session.createQuery(“来自用户”).list();
}
捕获(例外e)
{
e、 printStackTrace();
}
最后{
session.close();
}
返回用户;
}
公共列表getUserList(){
返回此.user;
}
}
由于该字段在托管bean中更改了名称,因此应在相应的视图中对其进行相应的编辑:
相关信息:
- ,更具体地说,第7节:属性
名称
#{user.fName}
电子邮件
#{user.email}
密码
#{user.pwd}
并更新User
类中的字段名,以遵循正确的JavaBean命名约定
public class users implements java.io.Serializable {
private long userId;
private String fName;
private String lName;
private long userTypeId;
private String userName;
private String email;
private String pwd;
private String note;
private boolean isActive;
//constructor, getters and setters
}
除此之外,当前设计中还有其他缺陷:
- 您的托管bean的getter中不能有业务逻辑,而应该利用
方法初始化要使用的必要数据@PostConstruct
- 由于这个bean看起来应该在用户停留在同一视图时保持活动状态,因此最好将其修饰为
,而不是@ViewScoped
@RequestScoped
- 为类和字段使用专有名称。例如,如果您有一个
字段,请将变量命名为列表
或类似名称,以便代码是自解释的somethingList
@ManagedBean
@ViewScoped
public class PretechDataTableBean {
private List<users> userList;
public PretechDataTableBean() {
}
@PostConstruct
public void init() {
Session session = HibernateUtil.getSessionFactory().openSession();
Transaction transaction = null;
List<users> users =null;
try
{
transaction = session.beginTransaction();
users = session.createQuery("from users").list();
}
catch(Exception e)
{
e.printStackTrace();
}
finally{
session.close();
}
return users;
}
public List<users> getUserList() {
return this.user;
}
}
@ManagedBean
@视域
公共类PretechDataTableBean{
私有列表用户列表;
公共数据表bean(){
}
@施工后
公共void init(){
Session Session=HibernateUtil.getSessionFactory().openSession();
事务=空;
列表用户=null;
尝试
{
事务=session.beginTransaction();
users=session.createQuery(“来自用户”).list();
}
捕获(例外e)
{
e、 printStackTrace();
}
最后{
session.close();
}
返回用户;
}
公共列表getUserList(){
返回此.user;
}
}
由于该字段在托管bean中更改了名称,因此应在相应的视图中对其进行相应的编辑:
相关信息:
- ,更具体地说,第7节:属性