私のアプリケーションには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しているの選択された値によって依存します。activityTypeMenuactivitySubTypeMenu
今私が直面している問題は次のとおりです。
- で「外部」と「内部」を選択し
activityTypeMenu、デフォルトで「1つ選択」したとします。から「外部」を選択activityTypeMenuするactivitySubTypeMenuと、「プロジェクト」と「サービス」が表示されます。ただし、デフォルトの「Select One」を選択した場合activitySubTypeMenuでも、以前に動的に入力された値が保持されます。これはrequired="true"、動的な値をロードしているバックエンドメソッドの起動に抵抗する属性が原因です。 - をに設定しようとしましたが
itemValue、「1つ選択」オプションを選択するとバックエンドメソッドが起動します。空のリストをに設定すると、この方法で空になります。しかし、その場合、は無意味になります。つまり、保存ボタンがあり、オプションを選択せずに(つまり、「1つ選択」を選択して)そのボタンをクリックすると、スローされず、コンポーネントはPrimefacesのエラーcssクラスによってスタイル設定されません。<f:selectItem itemLabel="Select One" itemValue="" />#{null}activitySubTypesactivitySubTypeMenurequired="true"activityTypeMenuactivitySubTypeMenuValidatorException itemValueまた、を設定<f:selectItem itemLabel="Select One" itemValue="" />しないと#{null}、選択した値をデフォルトのオプション(「1つ選択」)に変更しても、がクリアされませんactivityIdp:inputText。を使用する#{null}と、バックエンドメソッドを起動して、テキストボックスの値を空に設定できます。
この問題をどのように解決し、望ましい結果を得ることができますか。私が欲しいのは:
- オプションが「1つ選択」に設定されている場合、依存メニューは空になり、テキストボックスのメニューになります。
required="true"属性を使いたい。