从<h:inputText>获取空字符串进行验证

Ben*_*Ben 4 validation jsf

有没有办法让jsf验证器处理空字符串?我有一个针对所有inputTexts的自定义验证器.我不想实现"必需"标记,而是希望客户处理程序处理空字符串,并在支持bean中确定该字段是否是必需的.

<h:inputText id="SSID_STR" styleClass="propertyInput" value="#{wifiDM.SSIDStr}" validator="#{wifiDM.validate}" >
    <h:message for="SSID_STR" fatalClass="mandatoryFieldMissing" tooltip="true" />
</h:inputText>
Run Code Online (Sandbox Code Playgroud)

如果我必须添加所需的标记,我必须为我的应用中的每个输入文本执行此操作:

<h:inputText id="SSID_STR" styleClass="propertyInput" value="#{wifiDM.SSIDStr}" validator="#{wifiDM.validate}" required="#{wifiDM.isRequired} requiredMessage="*">
    <h:message for="SSID_STR" fatalClass="mandatoryFieldMissing" tooltip="true" />
    <f:attribute name="InputID" value="SSID_STR">
</h:inputText>
Run Code Online (Sandbox Code Playgroud)

这是一个烂摊子......


更新(澄清) 首先,使用JSF 1.2.每个字段在需要或不需要的意义上是独立的,因此组件依赖性的问题是无关紧要的.我的目标是通过验证器传递null值,因此我不必将两个标记添加到inputText.

此外,Validator处理程序将'component'作为参数,这意味着我可以获取其ID并实时查看是否需要它.(可能并不总是需要相同的组件).

如果我使用required="#{bean.requireCheck}"(例如)我可以以某种方式获取它被调用的组件?

Bal*_*usC 6

默认情况下,JSF 1.x不会在空字段上触发验证器.为此,required必须使用该属性.如果你的具体问题是required每当第一个字段被填入时必须设置第二个字段,那么你应该在required属性中检查它.

<h:inputText value="#{bean.input1}" binding="#{input1}" />
<h:inputText value="#{bean.input2}" required="#{not empty input1.value}" />
Run Code Online (Sandbox Code Playgroud)

如果这不是功能要求,那么你应该在问题中澄清更多,以便给出更合适的答案.


更新:那么你想从模型中控制需求?添加Map<String, Boolean>到bean如下:

private Map<String, Boolean> required;

public Bean() {
    required = new HashMap<String, Boolean>();
    required.put("foo", true);
    required.put("bar", false); // false entries are by the way not necessary.
    // ...
}

public Map<String, Boolean> getRequired() {
    return required;
}
Run Code Online (Sandbox Code Playgroud)

使用方法如下:

<h:inputText id="foo" required="#{bean.required['foo']}" />
<h:inputText id="bar" required="#{bean.required['bar']}" />
Run Code Online (Sandbox Code Playgroud)

如果您使用的是JSF 2.0,则可以按照以下方式执行

<h:inputText id="foo" required="#{bean.required[component.id]}" />
<h:inputText id="bar" required="#{bean.required[component.id]}" />
Run Code Online (Sandbox Code Playgroud)

与具体问题无关,把<h:message>孩子当作孩子是非法的<h:inputText>.把它们放在一起.