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