如何在datatable中获取转换值

时间:2012-12-22 12:40:28

标签: hibernate jsf primefaces

我正在使用primefaces 3.4和JSF 2.0。我有一个2表,一个是客户主,另一个是案例主。案例主条目完成后,只有案例主表中的客户机ID(案例主机中的外键)才会更新。我使用了与自动完成的primefaces展示中给出的相同的场景。

用户只需输入一些字符,并根据该名称进行建议。用户选择其中一个并保存它只有客户端ID将保存在案例master。基本上我已经使用转换器。

当用户添加案例条目时,它必须显示在datatable中。现在问题是我必须显示客户端名称而不是客户端ID。任何人都可以建议我如何在数据表中实现。

我试过以下

Created method in managed bean.   
value="#{caseUitility.clientName(case.id.clientID)}"
but failed.
  

严重:无法初始化代理 - 无会话

     

org.hibernate.LazyInitializationException:无法初始化代理 - 没有会话

任何人都可以建议我如何在数据表中实现。我应该为同一个客户端主机创建一个返回客户端名称的转换器。还是别的什么?

我希望这对你们所有人来说都是非常愚蠢的事情,但是我真的在这里堆积了一天半。

提前致谢....

3 个答案:

答案 0 :(得分:1)

你有LazyInitializationException。 您正在尝试访问未初始化的hibernate生成的代理。

在通过热切地获取内容或使用Hibernate.initialize(proxy)在Web应用程序中访问代理之前,正确初始化代理。

答案 1 :(得分:0)

您的entity方法中要访问的fieldclientName()似乎不会从数据库中查询。您可以通过client方法从数据库中重新查询clientName()对象或相关实体来克服此问题。
检查您的stacktrace并找到抛出异常的行,然后您就可以找到延迟加载的entity
如果没有看到你的clientName()方法和引发异常的行,很难再说些什么。

答案 2 :(得分:0)

以下是获取转换值的步骤,例如:主题ID的主题名称:

  1. 创建一个在Managed Bean类中获取主题名称的方法
  2. 
    public String getSubjectNameById(Integer subjectID)
        {
            String subjectName = getSubjectsService().getSubjectById(subjectID).getSubjectName();
            return subjectName;
        }
    


    2.在datatable列中调用xhtml类中的方法,如下所示:

    <p:column sortBy="#{QuestionsMB.subjectNameById}">
         <f:facet name="header">
             <h:outputText value="Subject :" />
         </f:facet>
         <h:outputText value="#{QuestionsMB.getSubjectNameById(question.subjectId)}" />
    </p:column>
    

    我希望这会有所帮助:)