2012-11-05 3 views
0

나는 최대 절전 모드와 jsf 기술에 익숙하지 않으며 사용자가 데이터베이스에서 값을 변경하고 검색하는 픽리스트를 갖고 자 노력 중이다. 다음과 같이jsf & hibernate 통합 - 데이터베이스의 선택 목록 값

내 데이터베이스 스키마는 다음과 같습니다

나는이 두 테이블 (개체) CRImageType (ImTypeId (PK), ImTypeName, ImTypeDescription) &에 많은이 CRVariable (VarId (PK), VarName과, VarDescription) 내 Hibernate 데이터 모델에서 구현 된 'imtype_variable'테이블을 통한 많은 관계.

모델이 정상적으로 작동하는 것 같습니다. 또한 테이블 CRVariable & CRImageType에 읽고 쓰려면 jsf 요소 (삽입, 편집 및 삭제 버튼 + 해당 대화 상자 + bean 클래스가있는 데이터 테이블)를 사용할 수 있습니다.

CRImageType을 CRVariable 레코드와 연결할 수 있도록 픽리스트를 갖고 싶습니다. 내 비즈니스 시나리오는 하나 개 이상의 변수 (의학 용어)와 이미지 유형을 다시 연결 할 수있다 그래서는 JSF 선택 목록 사용하고 있습니다 : 내가 구현 한 backbean 내 'reportConfigurator'에서 다음과 같은 방법을

<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> 

을 (온라인 primefaces 데모 다음)를 선택 목록 채우기 위해 :

@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; 
} 

돌아 가기 콩 방법을 ''내 콘솔에 정확한 목록 항목 객체 (소스 1 & 대상) 채워되기 때문에 잘 작동하는 것 그리고 그것은을 returnes 이중 행렬 모델 객체 (콘솔 출력) :

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)] 
... 

Τhe 문제는 내가 선택 목록 대화 상자를 호출 할 때 **, 선택 목록 열이 나는 그것을 내가 부르고 방식과 관련이 있다고 생각 디버깅/연구 후 ... 제대로

을 채울 수 없다는 것입니다 내 picklist 메소드 "reportConfiguratorBean.getAssocImTypVariables (...)".

내가 방법을 인수로 "reportConfiguratorBean.selectedCRImageType.imTypeId"를 사용하는 경우는 backbean에서 ZERO 값으로 전달됩니다!

정수를 인수로 하드 코딩하면. 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 

어떤 아이디어 ???

+0

문제는 내 .xhtml 파일에 있습니다. Picklist 구성 요소가 잘 작동하지 않습니다. 1) 인쇄하기 전에 '# {reportConfiguratorBean.selectedCRImageType.imTypeName}'을 입력하십시오. 2) 백엔드 메소드 '# {reportConfiguratorBean.getAssocImTypVariables (reportConfiguratorBean.selectedCRImageType.imTypeId)}}에서 이미지 유형 ID를 전달하려고 할 때'... – thanili

+0

'# {reportConfiguratorBean.getAssocImTypVariables (25)}'와 동일한 메소드를 호출하면 '잘 작동합니다! – thanili

답변

0

일부 조사 및 디버깅 후 선택 목록 구성 요소가 전달 될 인수가 필요한 메소드 (값 = "# {reportConfiguratorBean.selectedCRImageType.imTypeId}}")를 수락 할 수없는 것으로 보입니다. 재 구현 ""방법으로 (내 다시 콩 지금 세션 범위가) :

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

내 선택 목록이 채워집니다 ... virtualId가되어 selectedItem 아이디로 채워 전역 문자열 변수입니다

...