当前位置: 首页 > 面试题库 >

JSF:通过字段从Validator访问Bean

隆睿
2023-03-14
问题内容

我有一个JSF验证程序,用于检查“容器编号”字符串是否符合ISO-6346规范。

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

有什么方法可以在验证器中访问Bean并对其执行操作?理想情况下,我希望将其保留为验证器,但是,如果没有解决方案,则必须在持久化之前在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
      }
}

更新:
在许多方面,这与同时验证多个字段相似。BalusC的这段代码很有帮助。

非常感激。

D.


问题答案:

使用<,f:attribute>您可以将Bean传递给验证器,并以值表达式的形式从组件中检索它。

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

<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>

和我的验证器类:

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
  }


 类似资料:
  • 问题内容: 我已经在我的jsf应用程序中实现了spring安全性。一切正常,除了静态资源需要身份验证。这是我的配置 经过一些谷歌搜索,大多数解决方案是添加MVC资源标签。 我发现了类似的注释,并为此添加了一个配置类 但是仍然静态资源需要身份验证。有关如何进行此工作的一些帮助将非常有用。 注意:我的资源位于中。问题是如果用户未登录,则css,js的效果不会显示在登录页面中。用户登录一次,登录后进入登

  • 这是我正在研究的一个更大问题的一个简短的子问题。 为什么我不能通过第8行outer class中的inner class的实例访问outer类字段? 字段在内部类中可见。 外部类中的非静态方法仍然存在此问题。 字段的可见性并不重要。无论从哪种方式,它都可以从内部类中看到。 可以通过内部类中的(私有)getter访问该字段,但我出现问题的原因之一是,我希望避免这些。 它应该成为不可变的构建器模式的一

  • 问题内容: 我想捕获客户端JavaScript中的HTTP请求标头字段,主要是Referer和User-Agent。我该如何访问它们? Google Analytics(分析)设法通过将您嵌入到页面中的JavaScript来获取数据,因此绝对有可能。 问题答案: 如果要访问引荐来源网址和用户代理,客户端Javascript可以使用这些引荐来源网址和用户代理,但不能直接访问标头。 要检索引荐来源网址

  • 如何从Servlet访问JSF ViewScope托管bean? (假设所讨论的托管bean已经创建,但尚未销毁)

  • 问题内容: 我的问题是关于ReentrantLock的使用是否可以保证字段的可见性(与synced关键字提供的方面相同)。 例如,在以下类 A中 ,由于使用了 synced关键字 ,因此无需将 sharedData 字段声明为volatile。 对于下一个使用ReentrantLock的示例,该字段上的volatile关键字是否必要? 我知道无论如何使用volatile关键字都只会对性能造成微不足

  • 作用 验证给定字符串是否满足指定条件,一般用在表单字段验证里。 此类中全部为静态方法。 使用 判断验证 直接调用Validator.isXXX(String value)既可验证字段,返回是否通过验证。 例如: boolean isEmail = Validator.isEmail("loolly@gmail.com") 表示验证给定字符串是否复合电子邮件格式。 其他验证信息请参阅Validat