getSubmittedValue()为空jsf

getSubmittedValue()为空jsf,jsf,Jsf,我在jsf中遇到了一个问题,当我连接到 <h:inputText id="" value="" binding=""> <a4j:support actionListener="Action_Class.validateUserName" event="onblur" /> </h:inputText> 用户名为null。(提交的值仅在IE浏览器中出现,但在其余浏览器中,我的提交值为null)。 请做必要的操作。操作侦

我在jsf中遇到了一个问题,当我连接到

<h:inputText id="" value="" binding="">
  <a4j:support 
        actionListener="Action_Class.validateUserName" 
        event="onblur" />
</h:inputText>
用户名为null。(提交的值仅在IE浏览器中出现,但在其余浏览器中,我的提交值为null)。
请做必要的操作。

操作侦听器在调用应用程序阶段运行。此时,
UIInput#getSubmittedValue()
提供的输入组件的提交值只有在输入组件本身转换或验证失败时才可用。在验证阶段,如果输入组件已成功转换和验证,则提交的值将被清除,并设置组件的(本地)值。这可以通过
UIInput#getValue()
获得

因此,您实际上应该使用:

String userName = (String) input.getValue();

与具体问题无关,操作侦听器是执行验证的错误工具(至少,操作侦听器的类名暗示您的具体功能要求是验证用户名)。你应该使用一个普通的验证器。去掉整个
actionListener
,用通常的方式注册一个
。通过这种方式,提交(并转换,如果适用)的值可以立即作为
Validator
接口中
validate()
方法的第三个参数使用

例如


您需要将value字段分配给托管bean right。
String userName = (String) input.getValue();
<h:inputText ... validator="usernameValidator">
   <a4j:support event="onblur" />
</h:inputText>
public class UsernameValidator implements Validator {

    @Override
    public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException {
        String username = (String) value;
        // ...

        if (!valid) {
            throw new ValidatorException(new FacesMessage("Invalid username."));
        }
    }
}