0

selectManyMenu を機能させようとしていますが、コンバーターを正しく作成するのに問題があります。コンバーターを書く必要があるのはこれが初めてなので、物事はあまり明確ではありません。コンバーターでデータベースへの呼び出しを行うべきではないいくつかの場所を読みましたが、DB への呼び出し以外の方法で getAsObject メソッドで ID のオブジェクトを取得するにはどうすればよいですか?

@FacesConverter(value = "converterTest")
public class ConverterTest implements Converter {

@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {

    Configuration cfg = new Configuration();
    cfg.configure("hibernate.cfg.xml");
    System.out.println("ID: " + value);

    SessionFactory factory = cfg.buildSessionFactory();

    try {
        Session session = factory.openSession();    
        Equipment e = (Equipment) session.get(Equipment.class, Integer.valueOf(value));
        System.out.println("EQUIPMENT ID : " + e.getId());

        return e;

    } catch(Exception ex) {
        System.out.println("ERROR: " + ex.getMessage());
        return null;
    }

}

@Override
public String getAsString(FacesContext context, UIComponent component, Object object) {

    if(object != null) {
         System.out.println("ID: " + String.valueOf(((Equipment) object).getId())); 

         return String.valueOf(((Equipment) object).getId());
    }
    else {
        return null;
    }

}

}

重要:

ページが読み込まれると、私の selectManyMenu はレコードで満たされていますが、その名前は表示されず、レコード (機器) の名前ではなく、チェックボックスと空のスペースだけが表示されます。しかし、検索フィルターにいくつかの文字を入れようとすると、名前ではなくチェックボックスしか表示されなくても機能します。itemDescription="#{record.name}" を追加し、レコードの上にマウス ポインターを置くと、itemDescription が表示されます。したがって、明らかにコンポーネントはすべてのレコードにアクセスできますが、その名前は表示されません。スクリーン ショットは、http: //i57.tinypic.com/2wpm2ok.png (「Autoklav」はリストに表示したくないレコードの名前ですが、説明として表示されます) で確認できます。それはcssの問題ではありません、私はチェックしました:)

これは私のselectManyMenuです:

   <p:selectManyMenu id="advanced" value="#{pickListView.recordSet}" converter="converterTest"
                  var="t" filter="true" filterMatchMode="contains" showCheckbox="true">
        <f:selectItems value="#{pickListView.allEquipment}" var="record" itemLabel="#{record.name}" itemValue="#{record}" />

        <p:column style="width:90%">
            <h:outputText value="#{record.name}" />
        </p:column>
    </p:selectManyMenu>

2 番目の問題は、文字列をオブジェクトに変換することです。何をしなければならないのかわかりません。DB を呼び出すかどうかです。現時点では、何を試してもエラーが発生します。オブジェクトを String (id?) から取得する正しい方法は何ですか?

http://www.primefaces.org/showcase/ui/input/manyMenu.xhtmlの指示に従いましたが、何が間違っているのか、少なくともレコード名が表示されない理由がわかりません (getAsString は本当に単純です) 、動作するはずです)

誰か提案がありますか、またはすでに selectManyMenu のコンバーターを持っていますか? さらに情報が必要な場合は、喜んでお知らせします。

ありがとう!

4

0 に答える 0