我缺少一些非常基本的東西(與EAR或EAR配置中的類加載有關)。我無法弄清楚,爲什麼我的JSR 303驗證和Hibernate驗證不是從EAR內部觸發的......它會觸發如果我創建一個新的WAR項目。當EAR內部沒有觸發Bean驗證(JSR 303)和Hibernate驗證
我在Weblogic Server 10.3上使用Maven,JSF 2.0,Open-JPA,EJB 3.0設置了一個新項目。我使用maven原型創建了所有項目。我有一個最終的EAR構建其構造爲:
- PROJName
- EJB
- 網絡
- LIB
- META-INF
在Web,我有一個login.xhtml
與userName
和Password
個領域與TestMPB變量和具有依賴性映射勁歌:驗證-API 1.0.0.GA,休眠,驗證4.2.0.Final ...
頁面後臺bean的(TestMPB)變量@Pattern
和@NotEmpty
註解,但他們從來沒有被JSF驗證階段觸發。 JSF驗證工作正常,但我想使用JSR 303和Hibernate驗證。
login.xhtml
包含以下IMPT行:
<h:messages layout="table" showDetail="false" showSummary="true"/>
<h:inputText class="textbox" id="userId" value="#{testMPB.userId}"></h:inputText>
<h:commandButton id="button" action="#{testMPB.login}" value="Login" ></h:commandButton>
TestMPB包含:
@Pattern(regexp = "^(?=.*[a-zA-Z])[a-zA-Z0-9_]{2,15}\\s*$", message = "userId invalid")
@NotEmpty(message = "userId empty")
private String userId = "";
public String login(){ System.out.println("User Login ::"+getUserId());
return "/web/ui/s/home/home.xhtml";
}
Application.xml中包含
<?xml version="1.0" encoding="UTF-8"?>
<application xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_5.xsd" version="5">
<display-name>ear</display-name>
<module>
<web>
<web-uri>web</web-uri>
<context-root>/NewAccountsWeb</context-root>
</web>
</module>
<module>
<ejb>ejb</ejb>
</module>
<library-directory>lib</library-directory>
</application>
調試,我確信:
- JSF託管頁面bean(TestMPB)在頁面加載時初始化(通過在構造函數中添加SOP)
- 頁面提交時,調用方法並打印userName值。
- 在POM中添加JAR依賴關係是正確的,它們存在於最終的EAR構建中。
- 當我創建一個WAR項目時,相同的JSR 303和Hibernate驗證使用同一組
login.xhtml
和TestMPB.java。 - 創建階段偵聽器並打印所有階段以確保階段被調用。
- 爲了測試,我還添加了JSF驗證(
required=true
),它在h:message中工作並顯示消息。
能想出什麼可以解決這個問題嗎?
你可以顯示哪裏的bean驗證api和hibernate驗證器jar在最後的耳朵最終?當在類路徑上檢測到Bean驗證API時,應該自動啓用Bean驗證。我的猜測是有一個類加載問題。 – Hardy 2013-02-12 09:34:13