我想驗證輸入到我的託管bean中的JSF頁面,但由於某些原因它不起作用?JSF 2.0自定義驗證問題
@ManagedBean
@RequestScoped
public class RegistrationController {
//values passed from the JSF page
private String name;
...
public void validateName(FacesContext context, UIComponent validate,
Object value) {
String inputFromField = (String) value;
String simpleTextPatternText = "^[a-zA-Z0-9]+$";
Pattern textPattern = null;
Matcher nameMatcher = null;
textPattern = Pattern.compile(simpleTextPatternText);
nameMatcher = textPattern.matcher(getName());
if (!nameMatcher.matches()) {
((UIInput) validate).setValid(false);
FacesMessage msg = new FacesMessage(
"your name cant contain special characters");
context.addMessage(validate.getClientId(), msg);
}
}
這是輸入組件的樣子(內部形式):
<h:inputText value="#{registrationController.name}" validator="#{registrationController.validateName}" required="true">
<h:message for="nameInput"/>
當我輸入了錯誤輸入我沒有看到驗證信息,並在控制檯中我看到這個:
INFO: Instantiated an instance of org.hibernate.validator.engine.resolver.JPATraversableResolver. INFO: WARNING: FacesMessage(s) have been enqueued, but may not have been displayed. sourceId=bRegForm:j_idt7[severity=(ERROR 2), summary=(bRegForm:j_idt7: Validation Error: Value is required.), detail=(bRegForm:j_idt7: Validation Error: Value is required.)]
它可能是什麼?我忘了什麼嗎?我必須添加一些東西到我的配置文件...?
我只是做了更換
你說什麼,但我沒有看到我的任何形式輸出advicing我,我進入了一個錯誤的輸入。這就是控制檯所說的:信息:警告:FacesMessage(s)已被排隊,但可能沒有被顯示。 sourceId = bRegForm:name [severity =(ERROR 2),summary =(/ WEB-INF/registerComposition.xhtml @ 14,132 validator =「#{registrationController.validateName}」:java.lang.NullPointerException),detail =(/ WEB -INF/registerComposition.xhtml @ 14,132 validator =「#{registrationController.validateName}」:java.lang.NullPointerException)] – sfrj 2011-03-04 16:01:26
您仍**需要將'id =「name」'添加到輸入組件。然後可以找到'''。我甚至說,**「無關**的具體問題」:)順便說一句,你已經介紹了一個新的問題,NPE。 –
BalusC
2011-03-04 16:04:04
我更新了答案。將來,您應該提出一個新問題,而不是針對不同問題重複使用同一個問題。 – BalusC 2011-03-04 16:15:44