EL 3.0中的常量 - 未找到属性

时间:2013-08-26 17:19:31

标签: el

我正在尝试在我的JSF页面(https://java.net/projects/el-spec/pages/StaticField)上使用EL引用常量,但我仍然坚持这个例外:

javax.servlet.ServletException: /faces/signup.xhtml @18,85 maxlength="#{signUpBean.USERNAME_MAXLENGTH}": Property 'USERNAME_MAXLENGTH' not found on type com.foo.SignUpBean

我正在使用Tomcat 8.0.0-RC1,这是我的支持bean和输入声明:

豆:

@ManagedBean
@RequestScoped
public class SignUpBean implements Serializable {

    public static final int USERNAME_MAXLENGTH = 30;
    ...

}

我页面上的输入字段:

<input type="text" jsf:id="username" jsf:value="#{signUpBean.username}" maxlength="#{signUpBean.USERNAME_MAXLENGTH}" />

更新

maxlength="#{(com.foo.SignUpBean).USERNAME_MAXLENGTH}"我得到java.lang.NullPointerException: Argument Error: Parameter value is null

1 个答案:

答案 0 :(得分:0)

首先,关闭,请参阅BalusC's updated answer了解如何在EL 3.0表达式中正确使用常量。

现在,有了这个说法,如果您只想使用已发布的GlassFish 4.0版本来运行代码,则可以通过以下方式修改您的支持bean。您的辅助bean没有适合您的字段的getter / setter。支持bean需要具有getter / setter的JavaBeans样式属性。

@ManagedBean
@RequestScoped
public class SignUpBean implements Serializable {

    private final int USERNAME_MAXLENGTH = 30;
    private String username;

    ...

    public int getUSERNAME_MAXLENGTH() {
        return USERNAME_MAXLENGTH;
    }

    public void setUSERNAME_MAXLENGTH(int i) {
        // don't set anything, because this is a constant
    } 

    public String getUsername() {
        return username;
    }

    public void setUsername(String u) {
        username = u;
    }

}

然后你的Facelets标签:

<input type="text" 
       jsf:id="username" 
       jsf:value="#{signUpBean.username}" 
       jsf:maxlength="#{signUpBean.USERNAME_MAXLENGTH}" />

也就是说,不要让该字段静止。我建议在RI / GlassFish 4.0中更新JSF后将其转换为正确的语法。

修改:已修复input代码以使用jsf:maxlength