我在hibernate 里面订单表(consume)关联了 customer表
查询显示的时候
${consume.customer.customerName}
报这个表达式有问题
后查,数据库里面两张表里面的关联关系查询customer没数据
然后我加判断
<c:if test="${!empty consume.customer}">
   ${consume.customer.customerName}
</c:if>
这样他还是报el表达式解析为空
如何?

解决方案 »

  1.   

    <c:if test="这里面不能用EL吧."> 
       
    </c:if> 
      
    我用STRUTS2标签也遇到这问题..在这里面用EL总是没有值..
      后面我改用<s:set >
        然后在IF中用这个SET的值.不知道这根STRUTS2标签一样吗??希望对你有帮助.呵呵
      

  2.   

    我记得false不是  !empty吧,而是 not empty
    <c:if test="${not empty consume.customer}"> 
      

  3.   

    恩 这个问题的关键是外关联的时候
    customer在没有数据的情况下
    consume.customer 会报空
    用c:if test="${not empty consume.customer}"> 
    还是会报异常
      

  4.   


    我也是这样写${consume.customer.customerName},但是没有问题哦,照样可以访问,没有报空。
    不过我的consume跟customer是一对一的关系。
      

  5.   


    我也是这样写${consume.customer.customerName},但是没有问题哦,照样可以访问,没有报空。
    不过我的consume跟customer是一对一的关系。
      

  6.   

    我的consume跟customer是多对一的关系。
    现在确定consumer.customerid 关联不到customer.customerid 
    也就是说数据库里面consumer.customerid 在customer表里面没数据
    在数据库里面没建外键关联,也就是数据不完整,在这种情况下抱的异常
    如果有数据的话就不会报异常了
    现在就是解决数据有异常的情况下, 如何更健壮!
      

  7.   

    贴上报的异常
    type Exception reportmessage description The server encountered an internal error () that prevented it from fulfilling this request.exception org.apache.jasper.JasperException: javax.el.ELException: Error reading 'customerName' on type com.gpdi.common.entity.TCustomer$$EnhancerByCGLIB$$f5343126
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:522)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:416)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:337)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1063)
    org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:386)
    org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:229)
    org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
    org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    com.gpdi.common.filter.EndoceFilter.doFilter(EndoceFilter.java:61)
    com.gpdi.common.filter.AuthFilter.doFilter(AuthFilter.java:46)
    root cause javax.el.ELException: Error reading 'customerName' on type com.gpdi.common.entity.TCustomer$$EnhancerByCGLIB$$f5343126
    javax.el.BeanELResolver.getValue(BeanELResolver.java:66)
    javax.el.CompositeELResolver.getValue(CompositeELResolver.java:53)
    org.apache.el.parser.AstValue.getValue(AstValue.java:114)
    org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186)
    org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:923)
    org.apache.jsp.main.consume.queryConsume_jsp._jspService(queryConsume_jsp.java:438)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:337)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1063)
    org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:386)
    org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:229)
    org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
    org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    com.gpdi.common.filter.EndoceFilter.doFilter(EndoceFilter.java:61)
    com.gpdi.common.filter.AuthFilter.doFilter(AuthFilter.java:46)
    root cause org.hibernate.ObjectNotFoundException: No row with the given identifier exists: [com.gpdi.common.entity.TCustomer#27921]
    org.hibernate.ObjectNotFoundException.throwIfNull(ObjectNotFoundException.java:27)
    org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:65)
    org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:98)
    org.hibernate.proxy.CGLIBLazyInitializer.intercept(CGLIBLazyInitializer.java:158)
    com.gpdi.common.entity.TCustomer$$EnhancerByCGLIB$$f5343126.getCustomerName(<generated>)
    sun.reflect.GeneratedMethodAccessor73.invoke(Unknown Source)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    java.lang.reflect.Method.invoke(Method.java:597)
    javax.el.BeanELResolver.getValue(BeanELResolver.java:62)
    javax.el.CompositeELResolver.getValue(CompositeELResolver.java:53)
    org.apache.el.parser.AstValue.getValue(AstValue.java:114)
    org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186)
    org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:923)
    org.apache.jsp.main.consume.queryConsume_jsp._jspService(queryConsume_jsp.java:438)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:337)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1063)
    org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:386)
    org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:229)
    org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
    org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    com.gpdi.common.filter.EndoceFilter.doFilter(EndoceFilter.java:61)
    com.gpdi.common.filter.AuthFilter.doFilter(AuthFilter.java:46)
      

  8.   


    再加一个判断试试
    不知道你的后台SQL是怎么写的,consume.customer有可能不是empty,而是返回都是null字段的记录
    <c:if test="${not empty consume.customer}"> 
      <c:if test="${consume.customer.customerName != null}"> 
        ${consume.customer.customerName} 
      </c:if>
    </c:if> 
      

  9.   


    呵呵,就是判断的时候报异常
    c:if test="${not empty consume.customer}">
    因为consume.customer已经为空了 
      

  10.   

    <c:if test="${consume.customer}"> 
      ${consume.customer.customerName} 
    </c:if> 
    这么做试试,
    答对了记得加分
    没答对也要加分
    哈哈