2013-08-26 67 views
1

我想我的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的3.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

+0

[在JSF中有一个“常量”类)可能的重复(http://stackoverflow.com/questions/12668263/having-a-constants-class-in-jsf) –

回答

0

首先,关闭,看BalusC's updated answer如何在EL表达式3.0正确使用常量。现在,有了这个说法,如果你只是想让你的代码和GlassFish 4.0的发布版本一起工作,你可以用下面的方法修改你的backing 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

+0

谢谢,它现在可行。我还必须将'maxlength'更改为'jsf:maxlength'。 – perak