原型JSF更新验证失败后不起作用

前端之家收集整理的这篇文章主要介绍了原型JSF更新验证失败后不起作用前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
验证< p:inputText>时出现问题.并更新其内容.

基本上当inputText验证失败时,它再也不会被更新.

这是一个简单的例子来澄清:

Facelets:

  1. !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml"
  3. xmlns:h="http://java.sun.com/jsf/html"
  4. xmlns:f="http://java.sun.com/jsf/core"
  5. xmlns:ui="http://java.sun.com/jsf/facelets"
  6. xmlns:p="http://primefaces.org/ui">
  7. <h:head>
  8. </h:head>
  9. <body>
  10. <h1>Test</h1>
  11.  
  12. <h:form id="list" prependId="false">
  13. <ul>
  14. <li>Element 1&#160;
  15. <p:commandLink action="#{Test.assignElement}" update="detail_value">
  16. <f:setPropertyActionListener target="#{Test.currentElement}" value="1" />
  17. Assign
  18. </p:commandLink>
  19. </li>
  20. <li>Element 2&#160;
  21. <p:commandLink action="#{Test.assignElement}" update="detail_value">
  22. <f:setPropertyActionListener target="#{Test.currentElement}" value="2" />
  23. Assign
  24. </p:commandLink>
  25. </li>
  26. </ul>
  27. </h:form>
  28.  
  29. <h:form id="detail" prependId="false">
  30. <p:inputText value="#{Test.element}" id="detail_value" required="true" styleClass="#{Faces.messagesFor['detail_value'] ? 'border:1px solid red' : ''}">
  31. <p:ajax event="blur" update="detail_value"></p:ajax>
  32. </p:inputText>
  33. </h:form>
  34. </body>
  35. </html>

测试bean:

  1. package com.easydevel.test;
  2.  
  3. public class Test {
  4.  
  5. private String currentElement;
  6. private String element;
  7.  
  8. public String getCurrentElement() {
  9. return currentElement;
  10. }
  11.  
  12. public void setCurrentElement(String currentElement) {
  13. this.currentElement = currentElement;
  14. }
  15.  
  16. public String getElement() {
  17. return element;
  18. }
  19.  
  20. public void setElement(String element) {
  21. this.element = element;
  22. }
  23.  
  24. public String assignElement(){
  25. setElement(getCurrentElement());
  26. return "";
  27. }
  28.  
  29. }

如果您单击“元素”下面的命令链接,输入字段将被更新,但是当验证失败(只需将输入文本留空,并单击页面的其他任何部分)时,输入框的边框将变为红色.之后,在点击上述命令链接时,它再也不会被更新.

有任何想法吗?

Arjan tijms的答案将会奏效,但是我发现的最好的解决办法是:

>使用Omnifaces Solution
所以,而不是实现你的自我,所有你需要的只是一行简单的代码.

  1. <h:commandButton value="Update" action="#{bean.updateOtherInputs}">
  2. <f:ajax execute="currentInputs" render="otherInputs" />
  3. <f:actionListener type="org.omnifaces.eventlistener.ResetInputAjaxActionListener" />
  4. </h:commandButton>

>如果您使用的是Primefaces,可以使用resetInput component

  1. <p:commandButton value="Reset Non-Ajax" actionListener="#{resetInputView.reset}"
  2. immediate="true" ajax="false" style="margin-right:20px;">
  3. <p:resetInput target="panel" />
  4. </p:commandButton>

猜你在找的Ajax相关文章