выборочная проверка и сброс компонента - PullRequest
0 голосов
/ 25 января 2012

РЕДАКТИРОВАТЬ: У меня есть этот фрагмент кода:

<h:inputText id="email_id" value="#{CreateUserManager.email}" 
        styleClass="#{CreateUserManager.emailPrimariaValid ? '' : 'inputErrorClass'}">
    <f:validator validatorId="EmailValidator" />
    <a4j:support event="onblur" reRender="email_id, messages" oncomplete="setAnchor();"                         
        status="status4divCoverAll" ajaxSingle="true" />
</h:inputText>

Это управляемый сессионный компонент:

public class CreateUserManager {
...
protected boolean emailPrimariaValid;

public CreateUserManager() {
    ...
    this.emailPrimariaValid = true;
}


public boolean isEmailPrimariaValid() {
    FacesContext context = FacesContext.getCurrentInstance();
    UIInput input = (UIInput)context.getViewRoot().findComponent(":createUser:email_id");
    return input.isValid();
}

public void setEmailPrimariaValid(boolean emailPrimariaValid) {
    this.emailPrimariaValid = emailPrimariaValid;
}

}

Имейте в виду, что я удаляюэтот bean-компонент из сеанса, если я пришел с другой страницы (url), поэтому bean-компонент снова выполняет конструктор.

Проблема: я пишу недопустимое электронное письмо, и он правильно устанавливает класс для inputErrorClass, но если я перехожу кдругая страница (поэтому компонент ввода по-прежнему недействителен), а затем возвращается к первой, класс остается для inputErrorClass.

Ответы [ 2 ]

0 голосов
/ 25 января 2012
0 голосов
/ 25 января 2012

Вы случайно не используете шов?Он имеет некоторые хорошие функции для стилизации элементов ввода в случае ошибок.

В Seam 2 вы можете использовать тег <s:decorate>: http://docs.jboss.org/seam/2.2.0.GA/reference/en-US/html/controls.html#d0e28688

В Seam 3 вы можете использовать UIInputContainerи составной компонент: http://jerryorr.blogspot.com/2011/10/replacement-for-sdecorate-in-seam-3.html

Если вы не используете Seam ... хорошо, вы можете посмотреть на исходный код Seam, чтобы увидеть, что они сделали!

...