簡體   English   中英

Faces Bean驗證在Glassfish 3.1.1上不起作用

[英]Faces Bean Validation doesn't work on Glassfish 3.1.1

我在請求范圍內的托管bean中使用了bean驗證。

@ManagedBean(name = "loginController")
@RequestScoped
public class LoginController implements Serializable {

private static final long serialVersionUID = -7174581953062231554L;

@NotNull(message = "Password!")
private String mPassword;

@NotNull
private String mUsername;
...
...
public String login() {
    ..
    return "destination.xhtml";
}

..並且在web.xml中,我還配置了此功能,用於將空字符串解釋為null值:

<context-param>
    <param-name>javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL</param-name>
    <param-value>true</param-value>
</context-param>

該視圖看起來像這樣:

<h:form id="login">
    <h3><h:outputText value="Username" /></h3>
    <h:inputText id="username" value="#{loginController.username}" />
    <h3><h:outputText value="Password" /></h3>
    <h:inputSecret id="password" value="#{loginController.password}" autocomplete="off" />
    <h:commandButton id="submit" value="Login" action="#{loginController.login}">
        <f:param name="redirect" value="#{requestScope['javax.servlet.forward.request_uri']}" />
    </h:commandButton>
</h:form>

環境:Glassfish 3.1.1 / Mojarra JSF 2.1

問題:當按下沒有填寫用戶名或密碼字段的提交按鈕時,將執行該操作,盡管注釋(@ javax.validation.constraints.NotNull)可以防止這種情況。 驗證無效! 在字段中添加屬性“ required”將解決此問題,但我不希望視圖中具有驗證邏輯。 您對我有什么建議嗎?

更新

基本上,上面的代碼有效。 我在一個單獨的項目中對其進行了測試。 在另一個仍無法正常工作的項目中,情況有所不同。 該表單在web.xml文件中配置為登錄表單(login-config)。 這會改變jsf的生命周期嗎? ..或其他?

您的驗證是否不是String.empty而是“ notnull”? 特別是如果數據來自表單,則字符串的“空”值不應該存在。

需要

required屬性是一個布爾型標志,指示在將表單提交到服務器之前是否要求用戶為此字段提供一個值

也許在@NotNull下面,您可以嘗試添加

@Size(min=1, max=X)

參見此處: http : //download.oracle.com/javaee/6/tutorial/doc/gircz.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM