验证< 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>