我正在使用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>
托管 beans :
@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)中写入错误的内容,例如文本而不是数字,然后单击“确定”,然后输入将无效并标记为红色 . 我用取消或关闭按钮关闭对话框 . 如果我重新打开对话框,输入字段仍标记为红色 . 我不想要这种行为 .
另一个问题:在无效状态下“选择” - 来自Primefaces的组件通常会改变大小 . 如果我用h:selectOneMenu替换p:selectOneMenu,那么组件的大小合适 .
我的 question 是你如何改变JSF / Primefaces的状态,以便在你重新打开对话框后JSF将处于"validate"状态,而JSF将不会显示突出显示 .
我试图用"myBean.cancel"中的所有组件用setValid(true)更改组件状态但是它没有帮助 . 与此问题类似How to mark other components invalid in a custom multi-field validator
更新
谢谢你,红色边框的问题消失了 . 但我有另一个非常相似的问题 . 见:p:SelectOneMenue changes size in Primefaces/JSF if Converter/Validator error occurs
1 回答
要重置输入字段,请考虑使用Omnifaces . Omnifaces为此提供了一个ResetInputAjaxActionListener . 请看这里了解更多:http://showcase.omnifaces.org/eventlisteners/ResetInputAjaxActionListener .
Update 1
从PrimeFaces 3.4开始,您也可以使用
<p:resetInput>
而不是OmnifacesResetInputAjaxActionListener
. 看这里:http://www.primefaces.org/showcase/ui/resetInput.jsfUpdate 2
而且由于JSF 2.2你也可以使用
<f:ajax ... resetValues="true"/>
或<f:resetValues render="...">
.