我正在尝试使用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>