Prime faces p:在h:inputText上发生ajax更新时,keyFilter停止工作。请看下面的例子。
预期行为: p:keyFilter在任何时候都应该只允许inputText中的字母和数字。
重现的步骤:
1)直接进入"项目密钥"字段并尝试输入特殊字符..它将不允许..此时过滤器有效。
2)现在转到"项目名称"字段,然后单击"项目键"。这次尝试输入特殊字符。它允许进入。过滤器现在不起作用。
示例xhtml:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.org/ui"
xmlns:f="http://java.sun.com/jsf/core">
<h:head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
</h:head>
<h:form>
<h:outputText value="Project Name:"></h:outputText>
<h:inputText id="projectName" value="#{testBean.projectName}" >
<p:ajax event="blur" listener="#{testBean.updateKey()}" update="projectKey" process="@form"></p:ajax>
</h:inputText>
<br/>
<h:outputText value="Project Key:"></h:outputText>
<h:inputText id="projectKey" value="#{testBean.projectKey}" label="Project Key" size="29" maxlength="10">
</h:inputText>
<p:keyFilter for="projectKey" mask="alphanum" />
</h:form>
</html>
示例托管Bean:
import javax.faces.bean.ManagedBean;
import javax.persistence.Entity;
@ManagedBean(name="testBean")
@Entity
public class Test {
private String projectName;
private String projectKey;
public String getProjectName() {
return projectName;
}
public void setProjectName(String projectName) {
this.projectName = projectName;
}
public String getProjectKey() {
return projectKey;
}
public void setProjectKey(String projectKey) {
this.projectKey = projectKey;
}
public void updateKey()
{
if(projectName.equals("Shivani"))
{
projectKey = "SK";
}
}
}
答案 0 :(得分:1)
此错误已报告给PrimeFaces:https://github.com/primefaces/primefaces/issues/3596
该错误位于Jquery KeyFilter插件本身中:https://github.com/akzhan/jquery-keyfilter/issues/7
补丁已应用,将在PrimeFaces 6.3及更高版本中使用。
答案 1 :(得分:0)
当keyFilter被“渲染”时,将应用PrimeFaces键过滤器。它的应用方式可以在source of the keyfilter.js中看到。
在PrimeFaces展示(和文档)中,您将看到两个示例:
<p:inputText id="text1" value="....">
<p:keyFilter regEx="/[ABC]/i"/>
</p:inputText>
<h:outputText value="KeyFilter with mask on a h:inputText"/>
<h:inputText id="text2" value="..."/>
<p:keyFilter for="text2" mask="num" />
p:keyFilter
嵌套的地方和使用for
属性的地方之一。在更新输入后,后者不会自动重新应用,但前者将会重新应用。
如果确实需要非嵌套方式,请确保通过显式更新输入和密钥过滤器来更新输入和密钥过滤器,或者将它们嵌套在例如两者中。 h:panelgroup id="inputAndFilter"
并更新。
<h:panelgroup id="inputAndFilter">
<h:inputText id="text2" value="..."/>
<p:keyFilter for="text2" mask="num" />
</ui:panelgroup>