我用Seam Generate Entites 生成实体,随之生成类:
package org.domain.tmsoaseam.session;import org.domain.tmsoaseam.entity.*;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.framework.EntityQuery;
import java.util.Arrays;@Name("tUserList")
public class TUserList extends EntityQuery<TUser> { private static final String EJBQL = "select tUser from TUser tUser"; private static final String[] RESTRICTIONS = {
"lower(tUser.suser) like lower(concat(#{tUserList.tUser.suser},'%'))",
"lower(tUser.spwd) like lower(concat(#{tUserList.tUser.spwd},'%'))",
"lower(tUser.sname) like lower(concat(#{tUserList.tUser.sname},'%'))",
"lower(tUser.sex) like lower(concat(#{tUserList.tUser.sex},'%'))",
"lower(tUser.ismarry) like lower(concat(#{tUserList.tUser.ismarry},'%'))",
"lower(tUser.identitycard) like lower(concat(#{tUserList.tUser.identitycard},'%'))",
"lower(tUser.telephone) like lower(concat(#{tUserList.tUser.telephone},'%'))",
"lower(tUser.email) like lower(concat(#{tUserList.tUser.email},'%'))",
"lower(tUser.mobilephone) like lower(concat(#{tUserList.tUser.mobilephone},'%'))",
"lower(tUser.address) like lower(concat(#{tUserList.tUser.address},'%'))", }; private TUser tUser = new TUser(); public TUserList() {
setEjbql(EJBQL);
setRestrictionExpressionStrings(Arrays.asList(RESTRICTIONS));
setMaxResults(25);
} public TUser getTUser() {
return tUser;
}}访问:http://localhost:8099/TmsOASeam/TUserList.seam列表时报异常:14:34:37,929 INFO  [Authenticator] authenticating admin
14:34:41,493 SEVERE [viewhandler] Error Rendering View[/TUserList.xhtml]
javax.faces.FacesException: javax.el.PropertyNotFoundException: /TUserList.xhtml @19,75 value="#{tUserList.tUser.suser}": Property 'tUser' not found on type org.domain.tmsoaseam.session.TUserList_$$_javassist_seam_3
at javax.faces.component.UIOutput.getValue(UIOutput.java:187)
at com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getValue(HtmlBasicInputRenderer.java:201)
at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.getCurrentValue(HtmlBasicRenderer.java:284)
at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeEnd(HtmlBasicRenderer.java:154)
at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:861)
at org.jboss.seam.ui.util.cdk.RendererBase.renderChild(RendererBase.java:190)
at org.jboss.seam.ui.util.cdk.RendererBase.renderChildren(RendererBase.java:166)
at org.jboss.seam.ui.renderkit.DecorateRendererBase.doEncodeChildren(DecorateRendererBase.java:152)
at org.jboss.seam.ui.util.cdk.RendererBase.encodeChildren(RendererBase.java:92)
at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:837)
at org.ajax4jsf.renderkit.RendererBase.renderChild(RendererBase.java:277)
at org.ajax4jsf.renderkit.RendererBase.renderChildren(RendererBase.java:258)
at org.richfaces.renderkit.html.SimpleToggleControlTemplate.doEncodeChildren(SimpleToggleControlTemplate.java:347)
at org.richfaces.renderkit.html.SimpleToggleControlTemplate.doEncodeChildren(SimpleToggleControlTemplate.java:342)
at org.ajax4jsf.renderkit.RendererBase.encodeChildren(RendererBase.java:120)
at org.richfaces.renderkit.html.SimpleTogglePanelRenderer.encodeChildren(SimpleTogglePanelRenderer.java:186)
at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:837)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:930)
at javax.faces.render.Renderer.encodeChildren(Renderer.java:148)
at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:837)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:930)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:933)
at com.sun.facelets.FaceletViewHandler.renderView(FaceletViewHandler.java:592)
at org.ajax4jsf.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:100)
at org.ajax4jsf.application.AjaxViewHandler.renderView(AjaxViewHandler.java:176)
at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:110)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:266)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:83)
at org.jboss.seam.web.IdentityFilter.doFilter(IdentityFilter.java:40)
at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
at org.jboss.seam.web.MultipartFilter.doFilter(MultipartFilter.java:90)
at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
at org.jboss.seam.web.ExceptionFilter.doFilter(ExceptionFilter.java:64)
at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
at org.jboss.seam.web.RedirectFilter.doFilter(RedirectFilter.java:45)
at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:178)
at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290)
at org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:368)
at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:495)
at org.jboss.seam.web.Ajax4jsfFilter.doFilter(Ajax4jsfFilter.java:56)
at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
at org.jboss.seam.web.LoggingFilter.doFilter(LoggingFilter.java:60)
at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
at org.jboss.seam.web.HotDeployFilter.doFilter(HotDeployFilter.java:53)
at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
at org.jboss.seam.servlet.SeamFilter.doFilter(SeamFilter.java:158)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:235)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:190)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:433)
at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:92)
at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.process(SecurityContextEstablishmentValve.java:126)
at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityContextEstablishmentValve.java:70)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:330)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:829)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:598)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:619)
Caused by: javax.el.PropertyNotFoundException: /TUserList.xhtml @19,75 value="#{tUserList.tUser.suser}": Property 'tUser' not found on type org.domain.tmsoaseam.session.TUserList_$$_javassist_seam_3
at com.sun.facelets.el.TagValueExpression.getValue(TagValueExpression.java:73)
at javax.faces.component.UIOutput.getValue(UIOutput.java:184)
... 71 more
什么原因呢?我们是否需要更改其自动生成的类TUserList,还是我哪里有问题??希望各位指点指点,谢谢!

解决方案 »

  1.   

     可能是我的表名用T_user的缘故,现在我换了个表SeamUser:
    package org.domain.tmsoaseam.entity;// Generated 2011-2-16 15:30:44 by Hibernate Tools 3.4.0.CR1import java.math.BigDecimal;
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.Id;
    import javax.persistence.Table;
    import org.hibernate.validator.Length;
    import org.hibernate.validator.NotNull;/**
     * Seamuser generated by hbm2java
     */
    @Entity
    @Table(name = "SEAMUSER", schema = "OA_TUMUSHUI")
    public class Seamuser implements java.io.Serializable { private BigDecimal userid;
    private String username;
    private String password; public Seamuser() {
    } public Seamuser(BigDecimal userid) {
    this.userid = userid;
    } public Seamuser(BigDecimal userid, String username, String password) {
    this.userid = userid;
    this.username = username;
    this.password = password;
    } @Id
    @Column(name = "USERID", unique = true, nullable = false, precision = 22, scale = 0)
    @NotNull
    public BigDecimal getUserid() {
    return this.userid;
    } public void setUserid(BigDecimal userid) {
    this.userid = userid;
    } @Column(name = "USERNAME", length = 20)
    @Length(max = 20)
    public String getUsername() {
    return this.username;
    } public void setUsername(String username) {
    this.username = username;
    } @Column(name = "PASSWORD", length = 20)
    @Length(max = 20)
    public String getPassword() {
    return this.password;
    } public void setPassword(String password) {
    this.password = password;
    }}
    随之生成的类:
    package org.domain.tmsoaseam.session;import org.domain.tmsoaseam.entity.*;
    import org.jboss.seam.annotations.Name;
    import org.jboss.seam.framework.EntityQuery;
    import java.util.Arrays;@Name("seamuserList")
    public class SeamuserList extends EntityQuery<Seamuser> { private static final String EJBQL = "select a from Seamuser a"; private static final String[] RESTRICTIONS = {
    "lower(seamuser.username) like lower(concat(#{seamuserList.seamuser.username},'%'))",
    "lower(seamuser.password) like lower(concat(#{seamuserList.seamuser.password},'%'))", }; private Seamuser seamuser = new Seamuser(); public SeamuserList() {
    setEjbql(EJBQL);
    setRestrictionExpressionStrings(Arrays.asList(RESTRICTIONS));
    setMaxResults(25);
    } public Seamuser getSeamuser() {
    return seamuser;
    }
    }
    这下报映射不到:
    javax.el.ELException: /SeamuserList.xhtml: Error reading 'resultList' on type org.domain.tmsoaseam.session.SeamuserList_$$_javassist_seam_2
    at com.sun.facelets.compiler.TextInstruction.write(TextInstruction.java:48)
    at com.sun.facelets.compiler.UIInstructions.encodeBegin(UIInstructions.java:39)
    at org.ajax4jsf.renderkit.RendererBase.renderChild(RendererBase.java:275)
    at org.richfaces.renderkit.html.PanelRenderer.doEncodeBegin(PanelRenderer.java:189)
    at org.richfaces.renderkit.html.PanelRenderer.doEncodeBegin(PanelRenderer.java:148)
    at org.ajax4jsf.renderkit.RendererBase.encodeBegin(RendererBase.java:100)
    at javax.faces.component.UIComponentBase.encodeBegin(UIComponentBase.java:813)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:928)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:933)
    at com.sun.facelets.FaceletViewHandler.renderView(FaceletViewHandler.java:592)
    at org.ajax4jsf.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:100)
    at org.ajax4jsf.application.AjaxViewHandler.renderView(AjaxViewHandler.java:176)
    at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:110)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
    at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:266)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:83)
    at org.jboss.seam.web.IdentityFilter.doFilter(IdentityFilter.java:40)
    at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
    at org.jboss.seam.web.MultipartFilter.doFilter(MultipartFilter.java:90)
    at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
    at org.jboss.seam.web.ExceptionFilter.doFilter(ExceptionFilter.java:64)
    at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
    at org.jboss.seam.web.RedirectFilter.doFilter(RedirectFilter.java:45)
    at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
    at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:178)
    at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290)
    at org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:368)
    at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:495)
    at org.jboss.seam.web.Ajax4jsfFilter.doFilter(Ajax4jsfFilter.java:56)
    at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
    at org.jboss.seam.web.LoggingFilter.doFilter(LoggingFilter.java:60)
    at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
    at org.jboss.seam.web.HotDeployFilter.doFilter(HotDeployFilter.java:53)
    at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
    at org.jboss.seam.servlet.SeamFilter.doFilter(SeamFilter.java:158)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:235)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:190)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:433)
    at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:92)
    at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.process(SecurityContextEstablishmentValve.java:126)
    at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityContextEstablishmentValve.java:70)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:330)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:829)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:598)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
    at java.lang.Thread.run(Thread.java:619)
    Caused by: java.lang.IllegalArgumentException: org.hibernate.hql.ast.QuerySyntaxException: Seamuser is not mapped [select a from Seamuser a]
    at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:601)
    at org.hibernate.ejb.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:96)
    ......
    at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68)
    at org.jboss.seam.core.MethodContextInterceptor.aroundInvoke(MethodContextInterceptor.java:44)
    at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68)
    at org.jboss.seam.intercept.RootInterceptor.invoke(RootInterceptor.java:107)
    at org.jboss.seam.intercept.JavaBeanInterceptor.interceptInvocation(JavaBeanInterceptor.java:185)
    at org.jboss.seam.intercept.JavaBeanInterceptor.invoke(JavaBeanInterceptor.java:103)
    at org.domain.tmsoaseam.session.SeamuserList_$$_javassist_seam_2.getResultList(SeamuserList_$$_javassist_seam_2.java)
    ... 58 more
    Caused by: org.hibernate.hql.ast.QuerySyntaxException: Seamuser is not mapped [select a from Seamuser a]
    at org.hibernate.hql.ast.util.SessionFactoryHelper.requireClassPersister(SessionFactoryHelper.java:181)
    at org.hibernate.hql.ast.tree.FromElementFactory.addFromElement(FromElementFactory.java:110)
    at org.hibernate.hql.ast.tree.FromClause.addFromElement(FromClause.java:93)
    at org.hibernate.hql.ast.HqlSqlWalker.createFromElement(HqlSqlWalker.java:277)
    va:94)
    at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:156)
    at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:135)
    at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1650)
    at org.hibernate.ejb.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:93)
    ... 96 more希望哪位朋友给予解答,谢谢!
      

  2.   

    原因很简单,根据 JavaBeans 规范,通过 get 方法 public TUser getTUser() 找到的属性是 TUser,因此会报属性找不到,你要在 Seam 的 xhtml 中使用 #{tUserList.TUser.suser} 这样才可以。根据 JavaBeans 规范,属性的前两个字母要么全部大写,要么全部小写,像你这种 #{tUserList.tUser.suser} 中的 tUser 是不允许的!建议将 get 方法改为 public TUser getTuser(), set 方法也做同样的改动。
      

  3.   

    像 Seam Generate Entities,以及 Eclipse 自动生成的代码都是简单地使用字符串处理做出来的,并没有按照 JavaBeans 规范来实现,但是所有的开源框架都是按照 JavaBeans 规范来编写的。需要说明一下,字段与属性是有区别的。字段指的是类中的成员变量,而属性是通过 get/set 方法名演变出来的。像 EL 中的立即求值表达式 ${} 和仅能用于 JSF 中的延迟求值表达式 #{} 中的东西都是属性,而非字段。
      

  4.   

    private static final String EJBQL = "select a from Seamuser a";private static final String[] RESTRICTIONS = {
    "lower(seamuser.username) like lower(concat(#{seamuserList.seamuser.username},'%'))",
    "lower(seamuser.password) like lower(concat(#{seamuserList.seamuser.password},'%'))", };你自己看一下吧,表的别名是 a,而你在这里用的是 seamuser,你说能不出错么?PS:把 lower 函数去掉,否则在执行时很影响 SQL 性能的。
      

  5.   

    看了一下你历史的发帖,还是个很大方的人,帖子分数都挺多的,呵呵。不过你好像没分了,给你送上 1000 分的可用分,以示支持你学习 JBoss Seam。PS:CSDN 要扣 10% 的税,因此你能收到 900 分。分数已送出,请查收。
      

  6.   

    1.修改 /META-INF/persistence.xml,添加如下一行属性
     
    <property name="jboss.entity.manager.factory.jndi.name" value="java:/projectEntityManagerFactory"/>
     
    2.修改 /WEB-INF/components.xml,将如下配置属性
     
    <persistence:entity-manager-factory name="projectEntityManagerFactory" persistence-unit-name="project"/>
     
       <persistence:managed-persistence-context name="entityManager" auto-create="true"
                              entity-manager-factory="#{projectEntityManagerFactory}"/>
     
    修改为:
     
       <persistence:managed-persistence-context name="entityManager" auto-create="true" 
          entity-manager-factory="#{projectEntityManagerFactory}"
          persistence-unit-jndi-name="java:/projectEntityManagerFactory"/>
     
    问题解决了!
      

  7.   

    非常感谢!
    呵呵,问题困扰着我,没法就行下一步..急啊..
    对于你刚刚提到的问题,表名不要X_XXX命名,如T_User就可以避免了
    一个个改那就降低了jboss seam的优点了了
      

  8.   

    private static final String EJBQL = "select a from Seamuser a"; 我只是测试用的,,没有还原回去您提到的命名规范问题再次引起我的高度重视,再次感谢!
      

  9.   

    EAR 工程一创建就有 4 个关联的工程,调试起来比较麻烦,习惯了就好,呵呵。