JSF:如何仅在选择另一个组件时验证inputText
我有三个单选按钮,一个输入文本和一个提交按钮。我只想在选择某个收音机时验证提交时的输入文本。所以我有JSF:如何仅在选择另一个组件时验证inputText,jsf,jsf-2,Jsf,Jsf 2,我有三个单选按钮,一个输入文本和一个提交按钮。我只想在选择某个收音机时验证提交时的输入文本。所以我有 <h:inputText validator="#{myBean.validateNumber}" ... /> 使这不起作用的一件事是,当我提交时,validateNumber(…)在单选按钮setSelectedRadio(String selectedRadio)的setter方法之前运行。因此,造成这种说法 if(selectedRadio.equals("Some Va
<h:inputText validator="#{myBean.validateNumber}" ... />
使这不起作用的一件事是,当我提交时,validateNumber(…)
在单选按钮setSelectedRadio(String selectedRadio)
的setter方法之前运行。因此,造成这种说法
if(selectedRadio.equals("Some Value"){
validate(selectedText);
}
执行不正确。你知道如何解决这个问题吗?它被称为跨域验证(验证不仅基于组件的值,还基于组件的一组值)
目前,JSF2不支持它(),但有几个库(在提到的omnifaces问题中,似乎seamfaces也有一些库)可能会有所帮助。这个问题还有一个解决办法。称为跨域验证(验证不仅基于组件的值,还基于组件的一组值)
目前,JSF2不支持它(),但有几个库(在提到的omnifaces问题中,似乎seamfaces也有一些库)可能会有所帮助。问题中还有一个解决办法。选择的Radio作为模型值,仅在验证阶段之后的更新模型值阶段更新。这就是为什么在您尝试检查它时,它仍然是初始模型值的原因 您必须从请求参数映射(即原始提交的值)或
UIInput
引用中获取它,以便通过getSubmittedValue()
获取提交的值,或者通过getValue()
获取转换/验证的值
所以
或
selectedRadio
作为模型值,仅在验证阶段之后的更新模型值阶段更新。这就是为什么在您尝试检查它时,它仍然是初始模型值的原因
您必须从请求参数映射(即原始提交的值)或UIInput
引用中获取它,以便通过getSubmittedValue()
获取提交的值,或者通过getValue()
获取转换/验证的值
所以
或
谢谢你,巴卢斯克。它起作用了。您的omnifaces验证器能解决这个问题吗?我在考虑o:validateOrder,但我觉得它可能不起作用,因为我需要首先验证收音机是否被选中OmniFaces中没有类似的功能。这也是一个相当具体的要求。我个人宁愿使用
或其他东西。请注意,还有一个
,可以用这种方式替换required=“true”
。嗨,巴卢斯克。出于好奇,验证阶段将提供什么。我觉得在这个阶段没有什么可用的,因为验证是在更新模型值阶段之前进行的。例如,如果我只有一个常规的inputText,并且我想验证用户在其中键入的值,那么在更新模型阶段之前,该值不会被设置为绑定变量。我仍然需要通过请求参数映射来获取它,不是吗。对我来说似乎有点傻。需要验证的组件自身的值仅可用作validate()
method.goshh的第三个参数,我知道。太傻了。谢谢你的叫醒电话谢谢你,巴卢斯克。它起作用了。您的omnifaces验证器能解决这个问题吗?我在考虑o:validateOrder,但我觉得它可能不起作用,因为我需要首先验证收音机是否被选中OmniFaces中没有类似的功能。这也是一个相当具体的要求。我个人宁愿使用
或其他东西。请注意,还有一个
,可以用这种方式替换required=“true”
。嗨,巴卢斯克。出于好奇,验证阶段将提供什么。我觉得在这个阶段没有什么可用的,因为验证是在更新模型值阶段之前进行的。例如,如果我只有一个常规的inputText,并且我想验证用户在其中键入的值,那么在更新模型阶段之前,该值不会被设置为绑定变量。我仍然需要通过请求参数映射来获取它,不是吗。对我来说似乎有点傻。需要验证的组件自身的值仅可用作validate()
method.goshh的第三个参数,我知道。太傻了。谢谢你的叫醒电话。
if(selectedRadio.equals("Some Value"){
validate(selectedText);
}
String selectedRadio = externalContext.getRequestParameterMap().get("formId:radioId");
UIInput radio = (UIInput) viewRoot.findComponent("formId:radioId"); // Could if necessary be passed as component attribute.
String submittedValue = radio.getSubmittedValue(); // Only if radio component is positioned after input text, otherwise it's null if successfully converted/validated.
// or
String convertedAndValidatedValue = radio.getValue(); // Only if radio component is positioned before input text, otherwise it's the initial model value.