gpt4 book ai didi

validation - 验证失败后 Primefaces JSF 更新不起作用

转载 作者:行者123 更新时间:2023-12-02 11:28:36 25 4
gpt4 key购买 nike

我在验证 <p:inputText> 时遇到问题并更新其内容。

基本上,当 inputText 验证失败时,它永远不会再次更新。

这里有一个简单的例子来说明:

小面:

!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&#160;
<p:commandLink action="#{Test.assignElement}" update="detail_value">
<f:setPropertyActionListener target="#{Test.currentElement}" value="1" />
Assign
</p:commandLink>
</li>
<li>Element 2&#160;
<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'答案会起作用,但是我发现的最佳解决方案是:

  1. 使用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 tag handler :
  • <p:commandButton value="Reset p:ajax">
    <p:ajax update="panel" resetValues="true"/>
    </p:commandButton>

    关于validation - 验证失败后 Primefaces JSF 更新不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8677985/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com