Проверка AJAX onSubmit в JSF 2.0 - PullRequest
3 голосов
/ 15 марта 2012

Я начал изучать JSF2.0 и столкнулся с проблемой.Любые советы о том, как поступить, будут приветствоваться.

Я переименовал элементы формы и классы для простоты.

У меня есть форма, например:

<h:form id="frmSearch">
    <h:inputText id="dataPoint1" value="#{bean.dataPoint1}"/>
    <div id="dataPoint1Error" class="msgError">Value not found in database.</div>

    <h:inputText id="dataPoint2" value="#{bean.dataPoint2}"/>
    <div id="dataPoint2Error" class="msgError">Value not found in database.</div>

    <h:commandButton action="#{bean.validate}" type="submit" value="Search"/>
</h:form>

Класс CSS "msgError" по умолчанию скрывает элемент.

Я хотел бы, в основном, иметь метод в классе "bean", который проверяет входные данные путем проверки по базе данных, а затем, если значение не найдено, показать сообщение об ошибке или, если оно найдено,затем выполните другой метод, который выполняет фактическую функциональность.

В моей голове это будет работать примерно так в Java (простите за любые синтаксические ошибки, просто набирайте, как я думаю):

@ManagedBean
public class Bean {
    private String dataPoint1 = "";
    private String dataPoint2 = "";

    public boolean validate() {
        if(dao.fieldExists(this.dataPoint1) && dao.fieldExists(this.dataPoint2)) { //check the database
            performFunctionality();
            return true;
        }
        else {
            return false; //and show error div on screen
        }
    }        

    public void performFunctionality() {
        //do whatever
    }

    //getters and setters
}

Любой совет будет очень кстати!Спасибо!

1 Ответ

7 голосов
/ 15 марта 2012

Вы не используете встроенные средства проверки JSF. Используйте это.

Вот как это может выглядеть:

<h:form id="frmSearch">
    <h:inputText id="dataPoint1" value="#{bean.dataPoint1}" validator="#{bean.validateDataPoint}" />
    <h:message for="dataPoint1" />

    <h:inputText id="dataPoint2" value="#{bean.dataPoint2}" validator="#{bean.validateDataPoint}" />
    <h:message for="dataPoint2" />

    <h:commandButton action="#{bean.performFunctionality}" value="Search">
        <f:ajax execute="@form" render="@form" />
    </h:commandButton>
</h:form>

с

public void validateDataPoint(FacesContext context, UIComponent component, Object convertedValue) {
    if (!dao.fieldExists((String) convertedValue)) {
        throw new ValidatorException(new FacesMessage("Value not found in database."));
    }
}        

То, что performFunctionality() должно быть выполнено методом действия командной кнопки.

Если проверка не пройдена (т. Е. ValidatorException брошено), тогда сообщение будет отображаться в <h:message>, связанном с компонентом ввода, и метод действия не будет вызываться. Атрибут validator может также указывать на полноценный класс, который реализует javax.faces.validator.Validator. <f:ajax> добавлен, чтобы сделать его отправкой AJAX.

Смотри также:

Где бы вы ни изучали JSF, убедитесь, что вы также прочитали главы о преобразовании и проверке. Не думайте слишком много о PHP / ASP / JSP / jQuery. JSF - это полнофункциональная основанная на компонентах инфраструктура MVC.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...