我正在使用 Struts2-Bootstrap-Plugin 版本 2.0.4 进行客户端验证。我使用 bootstrapValidation 作为我的验证函数,并且我已将 jsonValidationWorkflowStack 添加到我的 struts 操作中。对于大多数事情,这按预期工作,将我的表单数据发送到服务器并执行我的服务器验证,而无需实际执行完整的帖子。但是,它不适用于文件。如果我在页面上有一个 s:file,那似乎被忽略了。执行验证方法时它始终为 null。如果我绕过插件的客户端验证,文件会正确提交并得到验证。我缺少什么文件才能正常工作?谢谢。
我的 Struts.xml
<action name="testValidateSave" class="webapp.action.TestValidationAction" method="save" >
<interceptor-ref name="jsonValidationWorkflowStack"/>
<result name="success">/WEB-INF/pages/testValidate.jsp</result>
<result name="error">/WEB-INF/pages/testValidate.jsp</result>
<result name="input">/WEB-INF/pages/testValidate.jsp</result>
</action>
我的 JSP 页面
<s:form id="testValidationForm" theme="bootstrap" method="post" labelCssClass="col-sm-2 text-semibold" elementCssClass="col-sm-10"
cssClass="form-horizontal" action="testValidateSave" enctype="multipart/form-data">
<div class="panel panel-flat">
<div class="panel-heading">
<h5 class="panel-title text-bold">Testing Client Validation</h5>
<div class="heading-elements">
<sj:submit button="true"
name = "Save"
type="button"
id="saveButton"
formIds="testValidationForm"
targets="bodySection"
iframe="true"
dataType="html"
validate="true"
validateFunction="bootstrapValidation"
cssClass="btn bg-cobalt-400 mr-5 pull-right"
buttonIcon="icon-floppy-disk"
label="Save"
value="Save"
/>
</div>
</div>
<div id="bodySection" class="panel-body">
<s:textfield
id="testText"
name="testText"
label="Test Text"
/>
<s:file
id="testDoc"
label="Test Doc"
name="testDoc"/>
</div>
</div>
</s:form>
还有我的动作课:
public class TestValidationAction extends ActionSupport {
private static final long serialVersionUID = 1L;
private String testText;
private File testDoc;
private String testDocContentType;
private String testDocFileName;
/*****************************************************************
* Action Methods
*****************************************************************/
@SkipValidation
public String execute() {
return SUCCESS;
}
public String save() {
return SUCCESS;
}
public void validate() {
super.validate();
System.out.println(" testText = " + this.testText);
System.out.println(" testDoc = " + this.testDoc );
if (this.testText == null || this.testText.isEmpty()) {
addFieldError("testText", "Required");
}
if (this.testDoc == null) {
addFieldError("testDoc", "Required");
}
}
/*****************************************************************
* Getters and Setters
*****************************************************************/
public String getTestText() {
return this.testText;
}
public void setTestText(String testText) {
this.testText = testText;
}
public File getTestDoc() {
return this.testDoc;
}
public void setTestDoc(File testDoc) {
this.testDoc= testDoc;
}
public String getTestDocFileName() {
return this.testDocFileName;
}
public void setTestDocFileName(String testDocFileName) {
this.testDocFileName= testDocFileName;
}
public String getTestDocContentType() {
return this.testDocContentType;
}
public void setTestDocContentType(String testDocContentType) {
this.testDocContentType= testDocContentType;
}
}