2013-08-26 64 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