EL 3.0中的常数-找不到属性 [英] Constants in EL 3.0 - Property not found

查看:65
本文介绍了EL 3.0中的常数-找不到属性的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试在我的JSF页面上使用EL引用常量( https:// java.net/projects/el-spec/pages/StaticField ),但是我遇到了这种例外情况:

I'm trying to reference constant with EL on my JSF page (https://java.net/projects/el-spec/pages/StaticField), but I'm stuck on this exception:

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和输入声明:

I'm using Tomcat 8.0.0-RC1 and here is my backing bean and input declaration:

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:参数错误:参数值为null

推荐答案

首先,请参见 BalusC的最新答案有关如何在EL 3.0表达式中正确使用常量的信息。

First, off, see BalusC's updated answer for how to properly use constants in EL 3.0 expressions.

现在,也就是说,如果您只是想立即使代码与已发布的GlassFish 4.0版本一起工作,则可以通过以下方式修改后备bean。您的支持bean没有适合您的领域的getter / setter。支持bean需要具有带有getter / setter的JavaBeans样式的属性。

Now, with that said, if you just want to get your code working right now with the released version of GlassFish 4.0, you can modify your backing bean in the following way. Your backing bean doesn't have a getter/setter for your field. Backing beans need to have JavaBeans-style properties with getters/setters.

@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标签:

Then your Facelets tag:

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

也就是说,不要将字段设为静态。我确实建议在RI / GlassFish 4.0中更新了JSF后,将其切换为正确的语法。

That is, don't make the field static. I do recommend switching this over to the correct syntax once JSF is updated in the RI/GlassFish 4.0.

编辑:固定的 input 标记以使用 jsf:maxlength

fixed input tag to use jsf:maxlength.

这篇关于EL 3.0中的常数-找不到属性的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆