Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JSF:如何仅在选择另一个组件时验证inputText_Jsf_Jsf 2 - Fatal编程技术网

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.