我正在尝试在我的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
答案 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
。