gpt4 book ai didi

JSF:如何仅在选择另一个组件时验证 inputText

转载 作者:行者123 更新时间:2023-12-04 18:14:35 24 4
gpt4 key购买 nike

我有三个单选按钮,一个 inputText 和一个提交按钮。我只想在选择某个 radio 时验证提交时的输入文本。所以我有

<h:inputText validator="#{myBean.validateNumber}" ... />

在我的 bean 里,我有
 public void validateNumber(FacesContext context, UIComponent component,
Object value) throws ValidatorException{
if(selectedRadio.equals("Some Value"){
validate(selectedText);
}
}

public void validate(String number){
if (number != null && !number.isEmpty()) {
try {
Integer.parseInt(number);
} catch (NumberFormatException ex) {
throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR,
"Error", "Not a number."));
}
} else {
throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR,
"Error", "Value is required."));
}
}

使这不起作用的一件事是,当我提交时, validateNumber(...)在我的单选按钮 setSelectedRadio(String selectedRadio) 的 setter 方法之前运行.因此造成这种说法
 if(selectedRadio.equals("Some Value"){
validate(selectedText);
}

不能正确执行。关于如何解决这个问题的任何想法?

最佳答案

selectedRadio是一个模型值,仅在更新模型值阶段更新,即验证阶段之后。这就是为什么在您尝试检查它时它仍然是初始模型值。

您必须从请求参数映射(这是原始提交值)或 UIInput 中获取它。引用,以便您可以通过 getSubmittedValue() 获取提交的值或 getValue() 的转换/验证值.

所以,

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.

关于JSF:如何仅在选择另一个组件时验证 inputText,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11978459/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com