Проверка на стороне клиента не работает с помощью validate()

Я делаю проверку внутри метода validate().

public void validate(){
    if(continent.equals("-1")){
        HttpServletRequest request=ServletActionContext.getRequest();  
        HttpSession session=request.getSession();  
        String s=(String)session.getAttribute("operation");
        if(s.equals("edit"))
                edit();
        else if(s.equals("add"))
                add();
        addFieldError( "Continent", "Continent must be selected");
    }
}

А в jsp(view) добавлен атрибут формы validate=true

<s:form action="add" name="aaa" cssClass="yy" method="post" validate="true">
        <s:textfield name="Code" label="Code" readonly="false" cssClass="defaultTextBox"/>
        <s:textfield name="Name" label="Name" cssClass="defaultTextBox"/>
        <s:select name="Continent" label="Continent" headerKey="-1" headerValue="Select" list="continentlist" cssClass="defaultTextBox"/>
        <s:textfield name="IndepYear" label="Independance Year" cssClass="defaultTextBox" />
        <s:submit value="Save" cssClass="login login-submit" theme="simple"/>
</s:form>

Но работает только проверка на стороне сервера. Мой вопрос -> не возможно ли добавить проверку на стороне клиента с помощью метода validate()?

3 ответа

В Struts 2 проверка на стороне клиента имеет разные значения и полностью зависит от типа используемой темы.

  1. С XHTML (по умолчанию) и CSS XHTML, вы можете использовать

    это полностью клиентская часть, основанная на Javascript и не взаимодействующая с сервером.

  2. С AJAX вместо этого вы можете запустить

    который свяжется с сервером, запустит весь стек проверки и (чтобы ответить на ваш вопрос) запустит ваш validate() методы тоже.


Я лично предпочитаю использовать SIMPLE тема, полностью обрабатывая HTML, CSS и JavaScript самостоятельно.

Поскольку проверка на стороне сервера является обязательной, проверку на стороне клиента следует рассматривать только как излишек, что положительно сказывается на том, чтобы сделать страницу более удобной для пользователя, и уменьшить сетевой трафик в среде с большим количеством пользователей (вы блокируете неудачные - но законные - запросы, прежде чем они идут по проводу:)

Подумайте об использовании типов HTML5 с откатом на jQuery, особенно если вы ориентируетесь на мобильные устройства.

На самом деле вы не должны смешивать код на стороне сервера и на стороне клиента. Метод validate может быть вызван только на стороне сервера... Поэтому нет способа использовать этот метод на стороне клиента. Вы должны написать свою собственную проверку JS-стороны так же, как проверку на стороне сервера.

Можно выполнить проверку AJAX, используя код на стороне сервера, используя плагин struts2-jquery, как показано в разделе " Витрина" в разделе:

  • Формы с проверкой
  • Формы с проверкой по обычаю

Пример, который может вас заинтересовать, - это Отправка формы без AJAX.

Другие вопросы по тегам