我正在尝试将Struts2 jQuery插件用于某些表单上的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的问题…谢谢您的帮助
响应正是结果执行后返回的结果。无论将结果配置为返回结果作为响应,无论实际返回哪种结果类型和结果代码,都取决于您的操作配置。
您返回的结果是整个页面的问题是因为INPUT验证失败时会返回结果。您必须validation从堆栈中删除拦截器,或者如果它是dispatcher结果类型,location则在执行结果之前更新结果配置的属性。
INPUT
validation
dispatcher
location