나는 최대 절전 모드와 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
어떤 아이디어 ???
문제는 내 .xhtml 파일에 있습니다. Picklist 구성 요소가 잘 작동하지 않습니다. 1) 인쇄하기 전에 '# {reportConfiguratorBean.selectedCRImageType.imTypeName}'을 입력하십시오. 2) 백엔드 메소드 '# {reportConfiguratorBean.getAssocImTypVariables (reportConfiguratorBean.selectedCRImageType.imTypeId)}}에서 이미지 유형 ID를 전달하려고 할 때'... – thanili
'# {reportConfiguratorBean.getAssocImTypVariables (25)}'와 동일한 메소드를 호출하면 '잘 작동합니다! – thanili