有没有办法让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>
如果我必须添加必需的标记,我必须为我的应用中的每个输入文本执行此操作:
<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>
这是一团糟......
更新(澄清) 首先,使用JSF 1.2。 每个字段在需要或不需要的意义上是独立的,因此组件依赖性的问题是无关紧要的。 我的目标是通过验证器传递null值,因此我不必将两个标记添加到inputText。
此外,Validator处理程序将'component'作为参数,这意味着我可以获取其ID并在实时中查看是否需要。 (可能并不总是需要相同的组件)。
如果我使用required="#{bean.requireCheck}"
(例如),我可以以某种方式获取调用它的组件吗?
答案 0 :(得分:6)
JSF 1.x默认情况下不会在空字段上激活验证器。为此,必须使用required
属性。如果您的具体问题是,只要填写了第一个字段,就必须设置第二个字段required
,那么您应该在required
属性中进行检查。
<h:inputText value="#{bean.input1}" binding="#{input1}" />
<h:inputText value="#{bean.input2}" required="#{not empty input1.value}" />
如果这不是功能要求,那么你应该在问题中澄清更多,以便给出更合适的答案。
更新:您想要从模型中控制需求吗?按如下方式向bean添加Map<String, Boolean>
:
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;
}
按如下方式使用:
<h:inputText id="foo" required="#{bean.required['foo']}" />
<h:inputText id="bar" required="#{bean.required['bar']}" />
如果您使用的是JSF 2.0,则可以按照以下步骤进行操作
<h:inputText id="foo" required="#{bean.required[component.id]}" />
<h:inputText id="bar" required="#{bean.required[component.id]}" />
与具体问题无关,将<h:message>
作为<h:inputText>
的孩子是违法的。把它们放在一起。