我是JSF的新手,並且需要通過一個JSF應用程序。設置字段在jsf驗證後爲空
我想驗證一個空白字符串的密碼字段。
我知道,而不是在Javascript中做它,我打電話驗證功能。
我的需要是,如果密碼字段的值是空的,那麼它將從驗證器函數驗證到現在它正確地運行,但是在驗證之後,當它到達時= UI bav = ck那時密碼字段應該是空的。
如果密碼字段爲空(僅包含空格),那麼我希望它將其設置爲空白或保持原樣。
我嘗試到現在爲止, JSF視圖頁面singin.xhtml
<h:outputText styleClass="outputBox" style="margin: 3px;"
value="Password" />
<h:inputSecret id="password" required="true"
requiredMessage="Please enter your password"
value="#{userActionManager.dto.password}"
validator="#{userActionManager.validateSamePassword}">
<a4j:ajax event="change" execute="@this" bypassUpdates="true" />
</h:inputSecret>
驗證方法。
public void validateSamePassword(FacesContext fc, UIComponent component, Object obj) {
System.out.println("UserActionManager.validateSamePassword()");
String confirmPassword = (String)obj;
System.out.println("Password is :" + confirmPassword);
if(confirmPassword!=null && confirmPassword.trim().equals("")) {
FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Password cannot be blank", " detail Passwords do not match!");
// System.out.println(component.getFamily());
// String field1Id = (String) component.getAttributes().get("password");
// Find the actual JSF component for the client ID.
// UIInput textInput = (UIInput) fc.getViewRoot().findComponent("password");
// textInput.setValue("");
dto.setPassword(null);
throw new ValidatorException(message);
}else{
dto.setPassword(confirmPassword);
}
}
我試過選項dto.setPassword(null);但是當它返回查看時,密碼字段中的空格仍然存在,我必須手動刪除。
我在想什麼?
component.resetValue
(); UIComponent上沒有這種方法。我嘗試像((UIInput)組件).resetValue(),我發現在UIInput中有resetValue。仍然沒有成功。空白值仍然存在於Field中,我想說清楚。 – Jayesh 2013-03-17 07:54:08
@JayeshPatel,其實這是有道理的。我的錯。從技術上講,只有拋出'ValidationException'時,驗證纔會失敗。我提出的當前解決方案是過早地重置值。查看我的更新以獲取更適合的時機。 – kolossus 2013-03-17 08:34:17
'resetValue()'未在'UIComponent'中定義。它在'EditableValueHolder'接口中定義,它由其他'UIInput'實現。 – BalusC 2013-03-17 15:07:41