私のアプリケーションにはp:selectOneMenu
、A、B、Cなどの3つのドロップダウンメニュー()があります。そのうちの2つは、BとCなどに依存しています。BIの値を変更すると、値が動的にCに読み込まれます。テキストボックスもあります。テキストボックスの値は、on-changeイベントがこれらの3つのドロップダウンから発生しているときに、ajaxによって生成されます。
これがxhtmlです:
<p:selectOneMenu id="customerMenu" value="#{adminController.activityDTO.customerId}" required="true" label="Customer Name" style="width: 200px">
<f:selectItem itemLabel="Select One" itemValue="" />
<f:selectItems value="#{adminController.customers}" var="customer" itemLabel="#{customer.customerName}" itemValue="#{customer.customerId}" />
<p:ajax listener="#{adminController.generateActivityName}" update="activityId" />
</p:selectOneMenu>
<p:selectOneMenu id="activityTypeMenu" value="#{adminController.activityDTO.activityParentType}" required="true" label="Activity Type"
style="width: 200px">
<f:selectItem itemLabel="Select One" itemValue="" />
<f:selectItems value="#{adminController.activityTypes}" var="activityType" itemLabel="#{activityType.parent}" itemValue="#{activityType.parent}" />
<p:ajax listener="#{adminController.updateDependentActivity}" update="activitySubType" />
</p:selectOneMenu>
<p:selectOneMenu id="activitySubTypeMenu" value="#{adminController.activityDTO.activitySubType}" required="true" label="Activity Sub Type"
style="width: 200px">
<f:selectItem itemLabel="Select One" itemValue="" />
<f:selectItems value="#{adminController.activitySubTypes}" var="activityType" itemLabel="#{activityType.name}" itemValue="#{activityType.id}" />
<p:ajax listener="#{adminController.generateActivityId}" update="activityId" />
</p:selectOneMenu>
<p:inputText id="activityId" autocomplete="off" readonly="true" value="#{adminController.activityDTO.activityId}"
label="#{adbBundle['admin.addActivityPanel.addActivityTable.activityId']}" required="true" />
activityTypeMenu
とは、私が入力activitySubTypeMenu
しているの選択された値によって依存します。activityTypeMenu
activitySubTypeMenu
今私が直面している問題は次のとおりです。
- で「外部」と「内部」を選択し
activityTypeMenu
、デフォルトで「1つ選択」したとします。から「外部」を選択activityTypeMenu
するactivitySubTypeMenu
と、「プロジェクト」と「サービス」が表示されます。ただし、デフォルトの「Select One」を選択した場合activitySubTypeMenu
でも、以前に動的に入力された値が保持されます。これはrequired="true"
、動的な値をロードしているバックエンドメソッドの起動に抵抗する属性が原因です。 - をに設定しようとしましたが
itemValue
、「1つ選択」オプションを選択するとバックエンドメソッドが起動します。空のリストをに設定すると、この方法で空になります。しかし、その場合、は無意味になります。つまり、保存ボタンがあり、オプションを選択せずに(つまり、「1つ選択」を選択して)そのボタンをクリックすると、スローされず、コンポーネントはPrimefacesのエラーcssクラスによってスタイル設定されません。<f:selectItem itemLabel="Select One" itemValue="" />
#{null}
activitySubTypes
activitySubTypeMenu
required="true"
activityTypeMenu
activitySubTypeMenu
ValidatorException
itemValue
また、を設定<f:selectItem itemLabel="Select One" itemValue="" />
しないと#{null}
、選択した値をデフォルトのオプション(「1つ選択」)に変更しても、がクリアされませんactivityId
p:inputText
。を使用する#{null}
と、バックエンドメソッドを起動して、テキストボックスの値を空に設定できます。
この問題をどのように解決し、望ましい結果を得ることができますか。私が欲しいのは:
- オプションが「1つ選択」に設定されている場合、依存メニューは空になり、テキストボックスのメニューになります。
required="true"
属性を使いたい。