1

私は Primefaces 3.5.2、Mojara 2.1.2 を使用しています。このページにはメインの xhtml ページとダイアログがあります。以下は簡単な例です

<h:form>
   <p:commandButton id="btn1" oncomplete="dlg.show()" update="dlg" process="@form"/>
</h:form>

   <p:dialog id="dlg" widgetVar="dlg">
      <h:form>
         <p:tabView id="tabview" activeIndex="..always 0 ...">
           <p:tab id="tab1">
             <p:panelGrid>
               <p:inputText id="input1" value="#{myBean.integer}"/>

             p:selectOneMenue is rendered wrong, if the dialog is reopened.
               <p:selectOneMenu id="select" value="#{myBean.listVal}" filter="true" style="width:100%">
                 <p:selectItems value="#{myBean.list}" />
               </p:selectOneMenu>
               <p:commandButton action="#{myBean.ok}" value="ok" oncomplete="..." update="dlg" process="@form"/>
               <p:commandButton action="#{myBean.cancel}" value="cancel"  update="dlg" process="@form"oncomplete="dlg.hide()"/>
             <p:panelGrid>
           </p:tab>
           <p:tab id="tab2">
            ...
           </p:tab>
         </p:tabView>
      </h:form>
   </p:dialog>   

マネージド Bean:

@ManagedBean
@SessionScoped
class MyBean {
   Integer integer;
   String listVal;

   public Integer getInteger() { ... }
   public void setInteger (Integer i) { ... }
   public void ok() { ... }
   public void cancel() { ... }

   public List<SelectItem> getList() { ... }
   public getListVal () { ... } 
   public setListVal (..) { ... }

}

ダイアログを開いて、入力フィールド (input1) に間違ったもの (数値ではなくテキストなど) を書き込んで [OK] をクリックすると、入力が無効になり、赤でマークされます。キャンセルまたは閉じるボタンでダイアログを閉じます。ダイアログを再度開くと、入力フィールドは赤くマークされたままになります。私はこの振る舞いを望んでいません。

別の問題: 無効化された状態で、Primefaces の "select" コンポーネントが頻繁にサイズを変更します。p:selectOneMenu を h:selectOneMenu に置き換えると、コンポーネントのサイズが適切になります。

私の質問は、JSF/Primefaces の状態を変更して、ダイアログを再度開いた後に JSF が「検証」状態になり、JSF が強調表示されないようにする方法です。

「myBean.cancel」のすべてのコンポーネントに対して setValid(true) を使用してコンポーネントの状態を変更しようとしましたが、役に立ちません。この質問 のように、カスタムマルチフィールドバリデーターで他のコンポーネントを無効にする方法

アップデート

ありがとう、赤い枠の問題はなくなりました。しかし、私は別の非常によく似た問題を抱えています。参照: p:SelectOneMenue は、コンバーター/バリデーター エラーが発生した場合、Primefaces/JSF でサイズを変更します

4

1 に答える 1

5

入力フィールドをリセットするには、Omnifaces の使用を検討してください。Omnifaces は、このための ResetInputAjaxActionListener を提供します。詳細については、http ://showcase.omnifaces.org/eventlisteners/ResetInputAjaxActionListener を参照してください。

更新 1

PrimeFaces 3.4 以降<p:resetInput>、 Omnifaces の代わりに使用することもできますResetInputAjaxActionListener。ここを参照してください: http://www.primefaces.org/showcase/ui/resetInput.jsf

更新 2

<f:ajax ... resetValues="true"/>また、JSF 2.2 以降では、 orも使用できます<f:resetValues render="...">

于 2013-04-12T10:29:36.747 に答える