getSubmittedValue()即将出现null jsf

时间:2013-10-02 03:54:27

标签: jsf

我在jsf遇到一个问题,当我附上我的时候,如下图所示

<h:inputText id="" value="" binding="">
  <a4j:support 
        actionListener="Action_Class.validateUserName" 
        event="onblur" />
</h:inputText>

如上所示,当我从字段中跳出时,validateUserName必须调用。正在调用,但是当我尝试获取我提交的值时,如下所示, null即将来临。

UIInput input = actionEvent.getParent();
String userName = input.getSubmittedValue();

用户名为null。(提交的值仅在IE浏览器中出现,但在剩余的浏览器中,我将作为提交的值获得null)。 请务必做。

1 个答案:

答案 0 :(得分:2)

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

所以,你应该实际使用:

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

对于具体问题,

无关,动作侦听器是执行验证的错误工具(至少,动作侦听器的类名称暗示您的具体功能要求是验证用户名)。您应该使用正常的验证器。摆脱整个actionListener,并以通常的方式注册<h:inputText validator><f:validator>。提交的(并转换的,如果适用的话)值可以通过validate()接口立即作为Validator方法的第三个参数使用。

E.g。

<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."));
        }
    }
}