jsf& hibernate集成 - 数据库中的选项列表值

时间:2012-11-05 13:53:55

标签: java hibernate jsf primefaces

我是hibernate和jsf技术的新手,我正在尝试从数据库中检索和更新(如果用户更改其值)值的选项列表。

我的数据库架构如下:

我有两个表(实体)CRImageType(ImTypeId(PK),ImTypeName,ImTypeDescription)& CRVariable(VarId(PK),VarName,VarDescription)通过我的Hibernate数据模型中实现的表'imtype_variable'具有多对多的关系。

该模型似乎工作正常。我也可以使用jsf元素(带有插入,编辑和删除按钮的数据表+相应的对话框+ bean类),以便读取和写入表CRVariable& CRImageType。

我想要一个选项列表,以便能够将CRImageType与CRVariable记录相关联。我的业务场景是能够将图像类型与一个或多个变量(医学术语)重新关联,因此我使用的是jsf选项列表:

<p:dialog id="dialog-associatevariables" header="Associate Variables" widgetVar="dlg7"     dynamic="true" showEffect="fade">
<h:panelGrid id="associateVariables" columns="1" cellpadding="4">
<p:pickList id="pickList" 
                value="#{reportConfiguratorBean.getAssocImTypVariables(reportConfiguratorBean.selectedCRImageType.imTypeId)}"
                var="cRVariable" 
                itemValue="#{cRVariable}" 
                itemLabel="#{cRVariable.varName}">
    <f:facet name="sourceCaption">Available Variables</f:facet>
        <f:facet name="targetCaption">Associated Variables</f:facet>
</p:pickList>
</h:panelGrid>  
</p:dialog>

在我的'reportConfigurator'backbean中,我已经实现了以下方法来填充选项列表(在线在线表面演示之后):

@SuppressWarnings("unchecked")
public DualListModel<CRVariable> getAssocImTypVariables(Long imTypeId)     {

List<CRVariable> source1;
List<CRVariable> target;
...         
String hq3 = "select distinct v from CRVariable v join v.crimagetypes t where t.id in (:itid)";
Query query3 = session.createQuery(hq3);
query3.setParameter("itid",imTypeId);
target = query3.list();
System.out.println("Associated Variables with Id: " + target);          
String hq4 = "select v FROM CRVariable v WHERE v.id not in (" +
            "select distinct v1.id " +
            "from CRVariable v1 " +
            "join v1.crimagetypes t2 " +
            "where t2.id in (:itid))";
Query query4 = session.createQuery(hq4);
query4.setParameter("itid",imTypeId);
source = query4.list();
System.out.println("Non Associated Variables with Id: " + source);
String hq5 = "FROM CRVariable";
Query query5 = session.createQuery(hq5);
source1 = query5.list();
System.out.println("Non Associated Variables with Id: " + source1);         
dualListVars = new DualListModel<CRVariable>(source1, target);          
System.out.println("Dual List Model: " + dualListVars);
...
{
session.close();
}
return dualListVars;
}

Back bean方法''似乎工作正常,因为在我的控制台中填充了正确的列表项对象(source1&amp; target),它返回一个双列表模型对象,如以下行所示(控制台输出):

Associated ImageType with Id: 26
...
Associated Variables with Id: [varId : 75, varName : Ki67(X), varDescription : Ki67(X)]
Non Associated Variables with Id: [varId : 71, varName : ER (X), varDescription : ER (X), varId : 72, varName : HER2(X), varDescription : HER2(X), varId : 73, varName : IHC, varDescription : IHC, varId : 74, varName : FISH, varDescription : FISH, varId : 76, varName : PTEN(X), varDescription : PTEN(X), varId : 77, varName : Histology (X), varDescription : Histology (X)]
...
Non Associated Variables with Id: [varId : 71, varName : ER (X), varDescription : ER (X), varId : 72, varName : HER2(X), varDescription : HER2(X), varId : 73, varName : IHC, varDescription : IHC, varId : 74, varName : FISH, varDescription : FISH, varId : 75, varName : Ki67(X), varDescription : Ki67(X), varId : 76, varName : PTEN(X), varDescription : PTEN(X), varId : 77, varName : Histology (X), varDescription : Histology (X)]
...

问题是**当我调用选项列表对话框时,选项列表不能正确填充...

经过一些调试/研究后,我认为这与我调用我的选项列表方法“reportConfiguratorBean.getAssocImTypVariables(...)”的方式有关。

如果我使用“reportConfiguratorBean.selectedCRImageType.imTypeId”作为方法参数,它将作为 ZERO值传递给backbean

如果我将整数作为参数进行硬编码,例如25 选项列表已正确填充但在控制台中我可以看到以下异常:

ERROR class java.lang.IllegalArgumentException: can't parse argument number reportConfiguratorBean.getAssocImTypVariables(25): javax.el.PropertyNotWritableException: /views/report-configurator.xhtml @271,10 value="#{reportConfiguratorBean.getAssocImTypVariables(25)}": Illegal Syntax for Set Operation

我所遗漏的任何想法???

1 个答案:

答案 0 :(得分:0)

经过一些研究和调试后,似乎我的选项列表组件无法接受(value =“#{reportConfiguratorBean.getAssocImTypVariables(reportConfiguratorBean.selectedCRImageType.imTypeId)}”)一个需要传递参数的方法...我是-implemented“”方法(我的后端bean现在是Session作用域)为:

public DualListModel<CRVariable> getAssocImTypVariables() {
    Long imTypeId = Long.parseLong(virtualId);
...

我的选项列表已填充......

其中virtualId是填充了selectedItem Id ...

的全局String变量