0

で奇妙な問題が発生してい<p:pickList>ます。この pickList を持つダイアログを開いて、RemoveAll ボタンを使用してターゲット リストからすべてのアイテムをクリアし、<p:commandButton>ターゲット リストの古いアイテムを使用して送信すると、引き続き表示されます。required=truepickListの属性を指定しました。奇妙な動作は、送信すると、フィールドが必須であることを示すツールチップが表示されることです。

アイテムがクリアされ、required属性が正常に機能している場合、古いアイテムが再び表示されるのはなぜですか? これに対する解決策は何ですか?

<p:pickList id="selectedId" value="#{someDialog.selectedItem}"
            var="item" itemValue="#{item}" required="true"
            converter="pickListConverter" requiredMessage="#{msg.required_message}" 
            styleClass="#{component.valid ? '': 'ui-state-error'}">
        </p:pickList>

編集:バッキング Bean - 関連するメソッドのみを投稿しています。 SomeDialog.java

 private DualListModel<Item> selectedItem = new DualListModel<Item>();
 //Its getters and setters

public final void afterSave(final ParamObject pObject) {
        pObject.getRelevantData().clear();
        pObject.getRelevantData().addAll(selectedItem.getTarget());
    }

ParamObject .java

private List<Item> relevantData = new ArrayList<Item>();
//Setters and Getters
4

1 に答える 1

2

@Xtreme Bikerが、バッキングBeanでそのことを述べたように。

初めてリストを送信するときは、バッキングBeanに設定します。2回目にダイアログを開くと、すでにそこにあります。RemoveAllを押しても、ブラウザでのみ削除され、バッキングBeanでは機能しません。また、required = trueであるため、送信は機能しません。

したがって、次のいずれかのオプションを選択できます。

  1. required = trueを削除し、送信するたびにRemoveAllを押して、空のリストを再度送信する必要があります(オプションではありません)。
  2. バッキングBeanで必要なすべてのタスクを実行した後、someDialog.selectedItem値をクリアし、ダイアログを更新して閉じます。
  3. ダイアログを開くたびに、バッキングBeanのsomeDialog.selectedItem値をクリアします。

私もここで新しいので、それが役立つことを願っています。

于 2013-01-03T08:14:24.180 に答える