有没有办法让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}"(例如)我可以以某种方式获取它被调用的组件?
默认情况下,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>.把它们放在一起.
| 归档时间: |
|
| 查看次数: |
6269 次 |
| 最近记录: |