我有一個型號:JSF2和JPA驗證不工作,雖然我有一個的<h:消息
@Entity
@Table(name = "User")
public class User implements Serializable {
private static final long serialVersionUID = 546951187473649176L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Size(min = 3, max = 25)
@Pattern(regexp = "[A-Za-z ]*", message = " wroooooong")
private String name;
/** some setters and getters **/
}
我有一個UserController.java
@ManagedBean(name = "userController")
@SessionScoped
public class UserController implements Serializable {
private static final long serialVersionUID = -4210819542193607967L;
@EJB
private UserProvider userProvider;
@Inject
EntityManager entityManager;
@PostConstruct
public void initNewUser() {
user = new User();
}
private User user;
public void registerUser() throws ValidatorException {
try {
userProvider.registerUser(new User(),user);
} catch (Exception e) {
throw new ValidatorException(new FacesMessage(e.getMessage()));
}
}
private String name;
/** some setters and getters **/
}
的UserProvider看起來像這樣:
@RequestScoped
@Stateful
public class UserProvider {
@Inject
private EntityManager entityManager;
public void registerUser (User newUser, String name) throws Exception {
try {
newUser.setName(name);
entityManager.persist(newUser);
} catch (Exception e){
throw e;
}
}
}
,最後我register.xhtml:
<h:form>
<label for="name">name</label>
<h:inputText id="name" value="#{userController.name}" required="true" />
<h:message id="register_name_error" for="name" errorClass="invalid"/>
<h:commandButton action="#{userController.registerUser()}" id="submit" value="send" />
</h:form>
,當我在名稱字段中輸入東西,總之,我得到這個在我的籌碼:
javax.validation.ConstraintViolationException: Validation failed for classes [de.liedl.bachelor.model.User] during persist time for groups [javax.validation.groups.Default, ]
List of constraint violations:[
ConstraintViolationImpl{interpolatedMessage='muss zwischen 3 und 25 liegen', propertyPath=accountName, rootBeanClass=class de.demotest.model.User, messageTemplate='{javax.validation.constraints.Size.message}'}
]
但誤差決不會丟回給我的<h:message
有什麼不對? 我下載了一個演示應用程序,它的工作非常容易,但是這有點不同,沒有提供商和控制器和模型,它只是模型和混合類...
我也試過這個只是拋出異常,有和沒有嘗試捕獲
Validator我需要在UserProvider?
感謝Balus。 但你的意思是:@Inject ist不工作在我的控制器?你的意思是'@Inject EntityManager em;'我的控制器中有一些功能,它看起來像在工作? - EJB(UserProvider)看起來像它的工作 – Joerg 2012-03-14 15:53:59
'@Inject'只能在'@ Named'類中使用。它是CDI的一部分,而不是JSF或EJB。 – BalusC 2012-03-14 15:58:25
,如果我在模型中做的是這樣的:\t'@Column(unique = true)'它不會發送給我的jsf ...但是我得到'唯一索引或主鍵違例:「CONSTRAINT_INDEX_2 ON PUBLIC。USER(EMAIL)「; SQL語句' – Joerg 2012-03-14 16:48:42