gpt4 book ai didi

java - JSF:通过字段从 validator 访问 Bean

转载 作者:搜寻专家 更新时间:2023-10-31 19:36:24 24 4
gpt4 key购买 nike

我有一个 JSF validator ,用于检查容器编号字符串是否符合 ISO-6346规范。

它工作正常,但是我需要根据 Container Number 来自的 Bean 中的其他值添加一些条件处理。这个 Bean 可以有几种不同的类型。

有什么方法可以访问 validator 中的Bean并对其进行操作吗?理想情况下,我希望将其保留为 validator ,但是如果没有解决方案,我将不得不在持久化之前在 Bean 中实现逻辑。

我在想一些事情:

public class ContainerNumberValidator implements javax.faces.validator.Validator {
public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException {

Object bean = UIComponent.getMyBeanSomehowThroughAMagicMethod();
if(bean instanceof BeanA) {
//do this
} else if(bean instanceof BeanB) {
//do that
}
}

更新:在很多方面,这与同时验证多个字段类似。 This code BalusC 很有帮助。

非常感谢。

D.

最佳答案

使用 < f:attribute>您可以将 Bean 传递给 validator 并从组件中将其作为值表达式检索。

所以我的输入是这样的(必须使用 <f:validator> 而不是 <h:inputText> 上的 validator 属性):

<h:inputText id="containerNum" size="20" maxlength="20" value="#{containerStockAction.containerStock.containerNumber}">
<f:validator validatorId="containerNumberValidator" />
<f:attribute name="containerBean" value="#{containerStockAction.containerStock}"/>
</h:inputText>

还有我的 validator 类:

public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException {
String containerNumber = (String)value;
Object containerBean = component.getValueExpression("containerBean").getValue(context.getELContext());

if(containerBean instanceof BeanA) {
//do this
}

关于java - JSF:通过字段从 validator 访问 Bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1178783/

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