我使用JSF 2.0、hibernate-validator4.2.jarvalidation-api.jar tomcat和Eclipse。
I put @Size(min=3, message="xxx")
@ManagedBean 中的注释和<f:validateBean />
之间<h:inputText value="#{user.name}"></h:inputText>
当我尝试运行该项目时,我收到此错误...
exception
javax.servlet.ServletException: Expression Error: Named Object: javax.faces.Bean not found.
javax.faces.webapp.FacesServlet.service(FacesServlet.java:606)
root cause
javax.faces.FacesException: Expression Error: Named Object: javax.faces.Bean not found.
com.sun.faces.application.ApplicationImpl.createValidator(ApplicationImpl.java:1593)
com.sun.faces.facelets.tag.jsf.ValidatorTagHandlerDelegateImpl.createValidator(ValidatorTagHandlerDelegateImpl.java:244)
com.sun.faces.facelets.tag.jsf.ValidatorTagHandlerDelegateImpl.applyAttachedObject(ValidatorTagHandlerDelegateImpl.java:132)
com.sun.faces.facelets.tag.jsf.ValidatorTagHandlerDelegateImpl.applyNested(ValidatorTagHandlerDelegateImpl.java:211)
com.sun.faces.facelets.tag.jsf.ValidatorTagHandlerDelegateImpl.apply(ValidatorTagHandlerDelegateImpl.java:87)
javax.faces.view.facelets.DelegatingMetaTagHandler.apply(DelegatingMetaTagHandler.java:120)
javax.faces.view.facelets.DelegatingMetaTagHandler.applyNextHandler(DelegatingMetaTagHandler.java:137)
为什么? (只有当我放置标签时才会出现)
用户.java
import java.io.Serializable;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.validation.constraints.Size;
@ManagedBean(name="user")
@SessionScoped
public class User{
@Size(min=3, message="At least 3 characters!")
private String name;
public String getName() {
return nume;
}
public void setName(String name){
this.name=name;
}
}
添加用户.xhtml
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
<ui:composition template="/templates/master_layout.xhtml">
<ui:define name="text_header" >Panou de control: Adauga user </ui:define>
<ui:define name="content">
<h:panelGrid columns="3">
<h:outputText value="Name"></h:outputText>
<h:inputText value="#{user.name}">
<f:validateBean />
</h:inputText>
<h:commandButton value="Inregistreaza" action="index.xhtml"></h:commandButton>
</h:panelGrid>
</ui:define>
</ui:composition>
</html>
它应该工作得很好,尽管是空的<f:validateBean/>标签在这种情况下完全是多余的。它应该用于更多地“微调”验证,例如通过指定所需的标签属性对验证进行分组和/或在每个输入的基础上禁用隐式 bean 验证。但是,该标签上没有任何属性,因此只需完全删除该标签即可。在默认的 JSF 2 + JSR 303 项目设置中,每当属性上有 JSR 303 注释时,它应该完全透明地启动,而无需添加更多 JSF 标签,例如@Size
和喜欢。
但我认为删除标签并不能解决这个特定的异常。因此你的问题更深层次。该验证器应该在启动时自动注册。然而,该异常基本上表明验证器根本没有注册。根据目前给出的信息,还无法给出有针对性的答案。我认为可能的原因有以下几种:
- 您正在使用的 JSF 实现中存在一个错误。将其升级到较新的版本。
- 您的类路径中有多个不同版本的 JSF 库。清理它。
- The
faces-config.xml
root 声明未声明为符合 JSF 2.x。修理它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)