gpt4 book ai didi

java - 使用 Facelets 1.1.12 在 JSF 1.2 中创建您自己的 validator

转载 作者:行者123 更新时间:2023-12-04 07:02:53 25 4
gpt4 key购买 nike

我正在查看以下 link发现javax.faces.webapp.ValidatorTag已弃用并由 ValidatorELTag 取代,但是我似乎找不到任何关于此的好信息。

我想创建一个接受输入的正则表达式 validator :正则表达式和错误消息。

这意味着我想要这样的控件:

<regexValidator for="myControl" check="([a-Z]^)" errorMessage="Your input contained incorrect characters" />

现在上面给定的链接显示了如何做这件事的一小部分,但是自从编写和不推荐使用方法以来,已经发生了很多变化,我该如何解决这个问题?

最佳答案

Creating a Custom ValidatorJEE5 Tutorial . Creating a Custom Tag部分详细介绍了如何实现您的 ValidatorELTag类(class)。

for="myControl"

我怀疑您是否需要此属性(我不确定您将如何使用它)。 validator 将在父控件上设置。 for属性通常仅在一个控件引用另一个控件时使用,例如在标签组件中。

编辑:我误读了这个问题;上面的答案适用于 JSP(核心 JSF 1.2 中与标签相关的类仅适用于 JSP; Facelets 有自己的标签系统 ;好消息是您不需要专门用于定义的 Java 类标签)。

样本 validator :
public class RegexValidator implements Validator, StateHolder {
private boolean isTransient;
private String regex;

public String getRegex() { return regex; }
public void setRegex(String regex) { this.regex = regex; }

public void validate(FacesContext context, UIComponent component, Object value)
throws ValidatorException {
//TODO: throw ValidatorException if not valid
}

//TODO: implement remaining StateHolder methods...
}

然后在 faces-config.xml 中注册此 validator 。 :
  <validator>
<validator-id>regex.validator</validator-id>
<validator-class>val.RegexValidator</validator-class>
</validator>

然后你 add a tag library到应用程序(例如 WEB-INF/facelets/foo.taglib.xml ):
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE facelet-taglib PUBLIC
"-//Sun Microsystems, Inc.//DTD Facelet Taglib 1.0//EN"
"http://java.sun.com/dtd/facelet-taglib_1_0.dtd">
<facelet-taglib xmlns="http://java.sun.com/JSF/Facelet">
<namespace>http://demo</namespace>
<tag>
<tag-name>regexValidator</tag-name>
<validator>
<validator-id>regex.validator</validator-id>
</validator>
</tag>
</facelet-taglib>

添加 xmlns:demo="http://demo"声明要在其中使用标记库的任何 Facelets View ;您的 validator 标签将以 <demo:regexValidator ... 的形式开始;属性将通过 validator 类的自省(introspection)来获取。

关于java - 使用 Facelets 1.1.12 在 JSF 1.2 中创建您自己的 validator ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1553678/

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