如何以 Struts 2 中要求的格式上传文件
How to make a file upload in a form required in Struts 2
我有一个 JSP 表单,它只是一个文件上传和一个提交按钮。
在操作 class' 验证方法中,我检查文件对象是否为空。
条件语句的计算结果为真,但字段错误没有显示,而是程序稍后运行到 NullPointerException。这就是我试图通过验证来缓解的问题。
我也试过在 try catch 中捕获异常,但这只会让问题更进一步,并为验证方法抛出异常。
Struts.xml
<!-- Displays a form for adding items -->
<action name="addItemsForm">
<result name="success">addItems.jsp</result>
</action>
<!-- Adds a TSV of items to the DB -->
<action name="addItems" class="AddItems">
<interceptor-ref name="fileUpload"/>
<result name="success" type="redirectAction">getItems</result>
<result name="input">addItems.jsp</result>
</action>
JSP:
<s:form theme="simple" namespace="/my/space" action="addItems" method="POST" enctype="multipart/form-data">
<div class="divTable">
<div class="divTableRow">
<div class="divParameterEntry">
TSV File:
</div>
<div class="divParameterEntry">
<s:file accept=".tsv" name="items"/>
</div>
<div class="divTableCell">
<s:submit value="submit" name="submit" cssStyle="width: 80px; height:30px;"/>
</div>
</div>
</div>
</s:form>
<br/>
<s:if test="hasFieldErrors()">
<span style="color:red;">
<s:fielderror />
</span>
</s:if>
操作Class'验证方法:
private File items;
public void validate() {
if (items == null)
addFieldError("items", "Please upload a file before submitting");
path = items.getAbsolutePath(); // The NullPointerException stems from here
}
这个问题实际上有一个非常简单的解决方案,我根本不知道,只是在处理其他事情时偶然发现的。
我可以通过在 JSP 中的 struts 文件标签中添加 required 来强制上传,如下所示:
<s:file accept=".tsv" name="items" required="required"/>
这可以防止用户在没有上传文件的情况下提交表单,并且不需要 javascript、ajax 等...
要了解为什么将其设置为 'required' 而不是 true,请参阅 this post
我有一个 JSP 表单,它只是一个文件上传和一个提交按钮。
在操作 class' 验证方法中,我检查文件对象是否为空。
条件语句的计算结果为真,但字段错误没有显示,而是程序稍后运行到 NullPointerException。这就是我试图通过验证来缓解的问题。
我也试过在 try catch 中捕获异常,但这只会让问题更进一步,并为验证方法抛出异常。
Struts.xml
<!-- Displays a form for adding items -->
<action name="addItemsForm">
<result name="success">addItems.jsp</result>
</action>
<!-- Adds a TSV of items to the DB -->
<action name="addItems" class="AddItems">
<interceptor-ref name="fileUpload"/>
<result name="success" type="redirectAction">getItems</result>
<result name="input">addItems.jsp</result>
</action>
JSP:
<s:form theme="simple" namespace="/my/space" action="addItems" method="POST" enctype="multipart/form-data">
<div class="divTable">
<div class="divTableRow">
<div class="divParameterEntry">
TSV File:
</div>
<div class="divParameterEntry">
<s:file accept=".tsv" name="items"/>
</div>
<div class="divTableCell">
<s:submit value="submit" name="submit" cssStyle="width: 80px; height:30px;"/>
</div>
</div>
</div>
</s:form>
<br/>
<s:if test="hasFieldErrors()">
<span style="color:red;">
<s:fielderror />
</span>
</s:if>
操作Class'验证方法:
private File items;
public void validate() {
if (items == null)
addFieldError("items", "Please upload a file before submitting");
path = items.getAbsolutePath(); // The NullPointerException stems from here
}
这个问题实际上有一个非常简单的解决方案,我根本不知道,只是在处理其他事情时偶然发现的。
我可以通过在 JSP 中的 struts 文件标签中添加 required 来强制上传,如下所示:
<s:file accept=".tsv" name="items" required="required"/>
这可以防止用户在没有上传文件的情况下提交表单,并且不需要 javascript、ajax 等...
要了解为什么将其设置为 'required' 而不是 true,请参阅 this post