我正在使用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:无法初始化代理 - 没有会话
任何人都可以建议我如何在数据表中实现。我应该为同一个客户端主机创建一个返回客户端名称的转换器。还是别的什么?
我希望这对你们所有人来说都是非常愚蠢的事情,但是我真的在这里堆积了一天半。
提前致谢....
答案 0 :(得分:1)
你有LazyInitializationException。 您正在尝试访问未初始化的hibernate生成的代理。
在通过热切地获取内容或使用Hibernate.initialize(proxy)在Web应用程序中访问代理之前,正确初始化代理。
答案 1 :(得分:0)
您的entity
方法中要访问的field
或clientName()
似乎不会从数据库中查询。您可以通过client
方法从数据库中重新查询clientName()
对象或相关实体来克服此问题。
检查您的stacktrace
并找到抛出异常的行,然后您就可以找到延迟加载的entity
。
如果没有看到你的clientName()
方法和引发异常的行,很难再说些什么。
答案 2 :(得分:0)
以下是获取转换值的步骤,例如:主题ID的主题名称:
public String getSubjectNameById(Integer subjectID)
{
String subjectName = getSubjectsService().getSubjectById(subjectID).getSubjectName();
return subjectName;
}
<p:column sortBy="#{QuestionsMB.subjectNameById}">
<f:facet name="header">
<h:outputText value="Subject :" />
</f:facet>
<h:outputText value="#{QuestionsMB.getSubjectNameById(question.subjectId)}" />
</p:column>
我希望这会有所帮助:)