原型JSF更新验证失败后不起作用
发布时间:2020-12-16 03:12:54 所属栏目:百科 来源:网络整理
导读:验证 p:inputText时出现问题.并更新其内容. 基本上当inputText验证失败时,它再也不会被更新. 这是一个简单的例子来澄清: Facelets: !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitiona
验证< p:inputText>时出现问题.并更新其内容.
基本上当inputText验证失败时,它再也不会被更新. 这是一个简单的例子来澄清: Facelets: !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:p="http://primefaces.org/ui"> <h:head> </h:head> <body> <h1>Test</h1> <h:form id="list" prependId="false"> <ul> <li>Element 1  <p:commandLink action="#{Test.assignElement}" update="detail_value"> <f:setPropertyActionListener target="#{Test.currentElement}" value="1" /> Assign </p:commandLink> </li> <li>Element 2  <p:commandLink action="#{Test.assignElement}" update="detail_value"> <f:setPropertyActionListener target="#{Test.currentElement}" value="2" /> Assign </p:commandLink> </li> </ul> </h:form> <h:form id="detail" prependId="false"> <p:inputText value="#{Test.element}" id="detail_value" required="true" styleClass="#{Faces.messagesFor['detail_value'] ? 'border:1px solid red' : ''}"> <p:ajax event="blur" update="detail_value"></p:ajax> </p:inputText> </h:form> </body> </html> 测试bean: package com.easydevel.test; public class Test { private String currentElement; private String element; public String getCurrentElement() { return currentElement; } public void setCurrentElement(String currentElement) { this.currentElement = currentElement; } public String getElement() { return element; } public void setElement(String element) { this.element = element; } public String assignElement(){ setElement(getCurrentElement()); return ""; } } 如果您单击“元素”下面的命令链接,输入字段将被更新,但是当验证失败(只需将输入文本留空,并单击页面的其他任何部分)时,输入框的边框将变为红色.之后,在点击上述命令链接时,它再也不会被更新. 有任何想法吗?
Arjan tijms的答案将会奏效,但是我发现的最好的解决办法是:
>使用Omnifaces Solution <h:commandButton value="Update" action="#{bean.updateOtherInputs}"> <f:ajax execute="currentInputs" render="otherInputs" /> <f:actionListener type="org.omnifaces.eventlistener.ResetInputAjaxActionListener" /> </h:commandButton> >如果您使用的是Primefaces,可以使用resetInput component: <p:commandButton value="Reset Non-Ajax" actionListener="#{resetInputView.reset}" immediate="true" ajax="false" style="margin-right:20px;"> <p:resetInput target="panel" /> </p:commandButton> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |