Плагин Struts2 jquery отвечает на ajax-запросы HTML всей страницы

Я пытаюсь использовать плагин jquery Struts2 для ajax-запросов в некоторых моих формах, но у меня возникла проблема с ответом на страницу. Действие struts проверяется и выполняется правильно, но когда jquery получает ответ, он устанавливает ответ как HTML всей страницы... Он помещает ответ в правильное место, но не отвечает с правильной вещью в все... Вот форма jsp:

<%@ tag language="java" pageEncoding="UTF-8"%>
<%@ taglib uri='http://java.sun.com/jsp/jstl/core' prefix='c'%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<%@ taglib prefix="sj" uri="/struts-jquery-tags"%>
<div class="columnbox">
    <h2>Contact Us</h2>
    <div id="contact">
        <s:form id="contact_form" action="contact" method="post" cssClass="clearfix">

            <label for="contact_user">Username / In-game name:</label>
            <input type="text" id="contact_user" name="contactBean.username" class="field"
                        data-enter-click="sendbutton" maxlength="16" size="16" />

            <div id="contact_response" class="response">

            </div>

            <sj:submit 
                    formIds="contact_form"
                    id="sendbutton"
                    targets="contact_response" 
                    value="Send" 
                    button="true"
                    />

        </s:form>
    </div>
</div>

А вот фрагмент класса contactAction:


public class ContactAction extends ActionSupport {

    private static final long serialVersionUID = -5484167219440627408L;

    private static final Log log = LogFactory.getLog(ContactAction.class);

    private ContactBean contactBean;


    @Override
    public String execute() throws Exception {
        log.info("TEST 4");
        //Do email stuff

        addActionMessage(Constants.EMAIL_SENT);

        log.info(this.getActionMessages());

        return Action.SUCCESS;
    }

    @Override
    public void validate() {
        System.out.println("TEST");
        log.info("TEST 2");
                //do validation
        if (contactBean == null) {
            addActionError("");
        }
        else if (contactBean.getUsername() == null || contactBean.getUsername().isEmpty()) {
            addActionError(Constants.NO_USERNAME);
        }
        log.info(this.getActionErrors());
    }

    public ContactBean getContactBean() {
        return contactBean;
    }

    public void setContactBean(ContactBean contactBean) {
        this.contactBean = contactBean;
    }

}

Я почти уверен, что тег именно такой, каким он должен быть. Запрос отправлен правильно, ответ получен. Это похоже на проблему с jquery... Спасибо за помощь


person Jon McPherson    schedule 22.09.2013    source источник
comment
Не зная ничего о конфигурации действия, трудно помочь.   -  person Dave Newton    schedule 22.09.2013


Ответы (1)


Ответ — это именно то, что вернул результат после его выполнения. Независимо от того, какой результат настроен для возврата результата в качестве ответа, какой бы тип результата и код результата ни возвращались, все зависит от конфигурации вашего действия.

У вас есть проблема, которая возвращает целую страницу в результате, потому что результат INPUT возвращается, когда проверка не удалась. Вы должны либо удалить перехватчик validation из стека, либо, если это тип результата dispatcher, обновить атрибут location конфигурации результата до того, как результат будет выполнен.

person Roman C    schedule 22.09.2013