为什么< f:validateBean/>不行吗 [英] Why <f:validateBean /> won't work?
问题描述
我使用JSF 2.0,hibernate-validator4.2.jarvalidation-api.jar tomcat和Eclipse.
I use JSF 2.0, hibernate-validator4.2.jar validation-api.jar tomcat and Eclipse.
我将@Size(min=3, message="xxx")
批注放在@ManagedBean中,并将<f:validateBean />
放在<h:inputText value="#{user.name}"></h:inputText>
I put @Size(min=3, message="xxx")
annotation in a @ManagedBean and <f:validateBean />
between <h:inputText value="#{user.name}"></h:inputText>
当我尝试运行项目时,出现此错误...
When I try to run the project i get this error...
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)
为什么? (仅当我放置标签时才会显示)
why? (this only appears when i put tag)
User.java
User.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;
}
}
adduser.xhtml
adduser.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>
推荐答案
尽管空的@Size等),就应该完全透明地启动而不添加更多JSF标签.
It should work perfectly fine, although the empty <f:validateBean/>
tag is entirely superfluous in this context. It's supposed to be used to "finetune" validation more, such as grouping of validation and/or disabling the implicit bean validation on a per-input basis by specifying the desired tag attributes. You have however no attributes on that tag, so just remove that tag altogether. On a default JSF 2 + JSR 303 project setup, it's supposed to kick in fully transparently without adding more JSF tags whenever there's a JSR 303 annotation on the property such as @Size
and likes.
但是我不认为删除标签可以解决此特殊异常.您的问题因此而更加深重.该验证程序应该在启动时自动注册.但是,该异常基本上表明验证器根本没有注册.到目前为止,根据给出的信息,不可能给出有针对性的答案.我可以想到以下可能的原因:
But I don't think that removing the tag will solve this particular exception. Your problem lies thus deeper. This validator is supposed to be auto-registered on startup. However, the exception basically tells that the validator is not registered at all. With the information given so far, it's not possible to give a targeted answer. I can think of the following possible causes:
- 您正在使用的JSF实现中存在一个错误.升级到新版本.
- 您的类路径中有多个不同版本的JSF库.清理它.
-
faces-config.xml
根声明未声明符合JSF2.x.修复它.
- There's a bug in the JSF implementation which you're using. Upgrade it to a newer version.
- You have multiple JSF libraries of different versions in your classpath. Cleanup it.
- The
faces-config.xml
root declaration is not declared conform JSF 2.x. Fix it.
这篇关于为什么< f:validateBean/>不行吗的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!