Я новичок в JSF и просматриваю одно приложение JSF.поле настройки пустым после проверки в jsf
Я хочу проверить одно поле «Пароль» для строки «Пустое».
Я знаю вместо того, чтобы делать это в Javascript, я вызываю функцию для проверки.
Моя потребность в том, что если значение поля пароля пуст, оно проверяется с помощью функции валидатора, пока оно не будет корректно, но после проверки, когда оно придет = s в 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(), и я обнаружил, что resetValue есть в UIInput. Все еще нет успеха. пустое значение все еще присутствует в поле, и я хочу дать понять. – Jayesh
@JayeshPatel, на самом деле это имеет смысл. Виноват. Технически валидация не сработает, пока вы не выбросите «ValidationException». Нынешнее решение, которое я предложил, преждевременно перезагружает значение. См. Мое обновление для более подходящего времени. – kolossus
'resetValue()' не определен в 'UIComponent'. Он определен в интерфейсе «EditableValueHolder», который реализован, среди прочего, «UIInput». – BalusC