0

私は休止状態と jsf テクノロジを初めて使用し、データベースから値を取得して更新する (ユーザーが値を変更した場合) ピックリストを作成しようとしています。

私のデータベーススキーマは次のとおりです。

Hibernate Data Model に実装されたテーブル「imtype_variable」を介して多対多の関係を持つ 2 つのテーブル (エンティティ) CRImageType(ImTypeId(PK),ImTypeName,ImTypeDescription) & CRVariable(VarId(PK),VarName,VarDescription) があります。

モデルはうまく機能しているようです。テーブルCRVariableとCRImageTypeを読み書きするために、jsf要素(挿入、編集、削除ボタンのあるデータテーブル+対応するダイアログボックス+ Beanクラス)を使用することもできます。

CRImageType を CRVariable レコードに関連付けるために、ピックリストも必要です。私のビジネス シナリオは、画像タイプを 1 つ以上の変数 (医学用語) に再関連付けできるようにすることなので、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」バックビーンでは、ピックリストにデータを入力するために次のメソッドを実装しました(オンラインのプライムフェイスのデモに従って):

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

バック Bean メソッド '' は正常に動作しているように見えます。これは、コンソールに正しいリスト項目オブジェクト (source1 と target) が設定されており、次の行 (コンソール出力) に示すように Dual List Model オブジェクトが返されるためです。

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」を使用すると、バックビーンでゼロ値として渡されます!!!

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

私が行方不明になっているもののアイデアはありますか???

4

1 に答える 1

0

調査とデバッグを行った結果、選択リストコンポーネントが(value = "#{reportConfiguratorBean.getAssocImTypVariables(reportConfiguratorBean.selectedCRImageType.imTypeId)}")引数を渡す必要のあるメソッドを受け入れることができなかったようです...再実装しました " "メソッド(私のバックBeanはセッションスコープになりました):

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

そして私の選択リストが作成されます...

ここで、virtualIdは、selectedItemIdが設定されたグローバル文字列変数です...

于 2012-11-08T15:22:08.450 に答える