将参数传递给验证器

时间:2018-10-04 07:29:34

标签: jsf mojarra

在我的jsf页面上,我使用了一个复合组件,该组件基本上是一个输入字段。我的后备bean包含一个列表,其中包含允许用户输入的所有允许的语言。提交后,我想根据该列表验证用户的输入。

所以我需要将列表传递给验证器,因为获取该列表会花费很长时间,所以我在初始化后备bean时就执行了。但是我在这里挣扎。

我的复合组件看起来像这样:

<html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:h="http://java.sun.com/jsf/html"
  xmlns:composite="http://java.sun.com/jsf/composite">
  <composite:interface>
    <composite:attribute name="value" required="true" />
    <composite:editableValueHolder name="nameValidator" targets="value" />
  </composite:interface>

  <composite:implementation>
    <h:panelGroup>
        <h:inputText id="value" value="#{cc.attrs.value}" />
    </h:panelGroup>
  </composite:implementation>
</html>

我的验证器如下:

@FacesValidator("OcrLanguageValidator")
public class OcrLanguageValidator implements Validator {

@Override
public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException {
    Object param1 = context.getExternalContext().getRequestParameterMap().get("param1");
    if (param1 != null) {

    }
}

}

我在jsf页面中使用的组件是这样的:

<h:form id="newParameter" styleClass="form-horizontal">
  <uiComps:testCC value="test" >
    <f:validator validatorId="OcrLanguageValidator" for="nameValidator" />
    <f:param name="param1" value="blub" />
  </uiComps:testCC>
</h:form>

调用验证器方法时,param1始终为null。我如何实现我的目标?我使用的是Mojarra 2.3。

由于可能重复而进行编辑: 我不认为这是重复的。我在这里使用复合组件。没有它是一种方法。但是我不喜欢在组件中添加特殊属性的想法,因为仅在一种情况下需要它,而在其他情况下则不需要。希望可能有更好的解决方案。

0 个答案:

没有答案