0

全て、

私は読んで検索していて、いくつかのイテンがありますが、何かが足りないようです。selectOneListBoxの変換でフォームが失敗し続ける

私は読んで検索しましたが、これまでのところ、この問題の原因は見つかりませんでした。私が読んで見つけた限り、考えられる理由は次のとおりです。

  1. Object.equals()が正しくありません
  2. メニューのリストは空です。

インラインは、Usersクラスに基づく私のコンバーターです。

@FacesConverter("misc.util.UserConverter")
public class UserConverter implements Converter {
    private static HashMap<String, Users> map = new HashMap<String, Users>();
    @Override
    public Object getAsObject(FacesContext context, UIComponent component, String value) {
        Users user = map.get(value);
        Logger.getGlobal().log(Level.INFO, "UserConverter - getAsObject " + user.getEmail());
        Logger.getGlobal().log(Level.INFO, "UserConverter - getAsObject value " + value);
        return user;
    }

    @Override
    public String getAsString(FacesContext context, UIComponent component, Object value) {
        Users user = (Users)value;
        map.put(user.getEmail().toString(), user);
        Logger.getGlobal().log(Level.INFO, "UserConverter - getAsString");
        return user.getEmail().toString();
    }
}

失敗しているコード:

ticketUpdateController.lovResearchers-タイプリスト-JpaControllerから取得したリスト。ticketUpdateController.researcher-タイプUsers

このページにはviewParamがあり、更新するにはこの値を維持する必要があるため、inputHiddenも追加しようとしました。それがなくても同じことが起こります。

    <p:dialog id="assignResearcherDialog" header="Assign Researcher" widgetVar="assignResearcher" resizable="false">
        <h:form id="assignResearcherForm">
            <p:panel>
                <p:selectOneListbox id="selRec" value="#{ticketUpdateController.researcher}">
                    <f:selectItems value="#{ticketUpdateController.lovResearchers}" var="r" itemLabel="#{r.email}" itemValue="#{r}"></f:selectItems>
                    <f:converter converterId="misc.util.UserConverter"></f:converter>
                    <h:inputHidden value="#{ticketUpdateController.ticketNumber}"></h:inputHidden>
                </p:selectOneListbox>
                <p:commandButton value="Assign" actionListener="#{ticketUpdateController.setResearcher}" oncomplete="handleSubmitRequest(xhr, status, args, 'assignResearcherDialog','assignResearcherForm');" update=":ticketUpdateForm :message">
                    <h:inputHidden value="#{ticketUpdateController.ticketNumber}"></h:inputHidden>
                    <f:param id="tnr" value="#{ticketUpdateController.ticketNumber}"></f:param>
                </p:commandButton>
            </p:panel>
        </h:form>
    </p:dialog>

私のトラブルシューティング:

  • Usersクラスを確認しましたが、equalsがまったく呼び出されていません。(そこにロガーを置いて確認してください)
  • コンバータークラスにロギングを入れて、いつ呼び出されるかを確認します。これまでのところ、必要なときに呼び出されるようです。JSFページが読み込まれ、ボタンを押すと。
  • 値がまだメモリ内にあるかどうかを確認できるように、TicketUpdateControllerBeanの初期化にロガーを追加しました。
警告:クラスgui.controller.TicketUpdateController開始中...
警告:クラスgui.controller.TicketUpdateController設定値..
情報:UserConverter-getAsString情報:UserConverter-getAsString
情報:UserConverter-getAsString情報:UserConverter-getAsString
警告:クラスgui.controller.TicketUpdateController開始中...
警告:クラスgui.controller.TicketUpdateController設定値..
情報:UserConverter-getAsString情報:UserConverter-getAsString
情報:UserConverter-getAsString情報:UserConverter-getAsString
情報:UserConverter-getAsObject Researcher@localhost.com
INFO:UserConverter-getAsObject value Researcher@localhost.com
警告:クラスgui.controller.TicketUpdateController開始中...
4

1 に答える 1

0

何が悪かったのかを見つけました。

だから基本的に私は間違ったクラスを使っていました。
私のページBeanはTicketUpdateControllerでしたが、私のコンバーターはユーザー向けです。

そこで、selectedItemsのフィールドをTicketUpdateControllerからUsersControllerに変更しました。

結局のところ、TicketUpdatecontrollerではなくUsersControllerからすべてのユーザーを取得する必要があります。

于 2013-03-06T12:36:19.833 に答える