Primefaces KeyFilter:调用“后不工作”;ajax更新";关于h:inputText
当h:inputText上发生ajax更新时,Prime faces p:keyFilter停止工作。请看下面的例子 预期行为: p:keyFilter在任何时候都应该只允许inputText中的字母和数字 复制步骤:Primefaces KeyFilter:调用“后不工作”;ajax更新";关于h:inputText,primefaces,keyfilter,Primefaces,Keyfilter,当h:inputText上发生ajax更新时,Prime faces p:keyFilter停止工作。请看下面的例子 预期行为: p:keyFilter在任何时候都应该只允许inputText中的字母和数字 复制步骤: <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://
<!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>
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";
}
}
}
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>
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";
}
}
}
“渲染”关键过滤器时,将应用PrimeFaces关键过滤器。它的应用方式可以从中看出 在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" />
已向PrimeFaces报告此错误: 该bug存在于Jquery KeyFilter插件本身:
该修补程序已应用,将在PrimeFaces 6.3及更高版本中。offtopic:不要使实体也成为托管bean。让它成为豆子的财产:。非常感谢。我试图通过为过滤器提供单独的Id来明确更新过滤器和输入。但这并不奏效。将它们嵌套在ui片段中是可行的,但在这种情况下,不会更新projectKey。根据上述代码逻辑,如果我在项目名称中输入“Shivani”,那么项目密钥应该由“SK”自动填充。但在将其嵌套到ui中后,现在不会发生这种情况:fragmentHmmmm。。。我希望你能看到输入文本中仍然需要值部分。。。如果您确实有这样的问题,那么将控件嵌套在h:panelGroup而不是ui:fragment workshmmm中会出现另一个问题。。。奇怪的最喜欢,因为它不呈现任何东西,它不能被PF ajax更新。。。今晚让我检查一下……您可以尝试使用
f:ajax render=“…”
和ui:fragment
?