Struts2:AJAX验证+文件上传

时间:2011-04-28 15:57:28

标签: java jquery ajax struts2 struts-validation

我正在尝试使用jsonValidationWorkflowStack在Struts 2.2.1.1中的表单上执行AJAX验证。这个表格在没有AJAX的情况下提交;我正在使用AJAX:

  

java.lang.NoSuchMethodException:com ... MyAction.setDocFile([Ljava.lang.String;)

问题是当客户端生成验证XMLHttpRequest时,它会发布文件名而不是实际文件。这会导致Struts查找String setter,而不是我定义的File setter。当我使用常规提交按钮发布此表单时,

有人对如何缓解这个问题有任何建议吗?

要遵循的相关代码。请注意,我没有在下面执行任何验证。我删除了正在验证的字段,因为它们与此讨论无关。

MyAction.java

@Action(value = "doc_save", interceptorRefs = {
    @InterceptorRef("fileUpload"),
    @InterceptorRef("jsonValidationWorkflowStack")})
public String save() throws Exception {
    // ...
}
public void setDocFile(final File docFile) {
    this.docFile = docFile;
}

view.jsp的

<%@page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" session="false"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<%@ taglib prefix="sj" uri="/struts-jquery-tags"%>

<div id="save_results"></div>
<s:form action="doc_save" method="post" enctype="multipart/form-data">
  <s:file name="docFile" label="Select Document"/>
  <sj:submit value="Submit" targets="save_results" validate="true"
             cssClass="r-button"/>
</s:form>

<script type="text/javascript"
        src="<s:url value="/struts/utils.js"/>"></script>
<script type="text/javascript"
        src="<s:url value="/struts/xhtml/validation.js"/>"></script>

0 个答案:

没有答案