我正在开发一个简单的 Spring Web 应用程序来管理 PDF 格式的文档,它应该能够执行通常的操作:列出它们,添加一个新的,删除和更新。这些操作转到 MS SQL Server 数据库(文档表有一个 VARBINARY(MAX) 字段来存储文档的字节)。更新(以前添加的)文件时出现问题。添加文件很容易。JSP 中的简化形式是这样的:
<form:form method="post" action="AddDoc" commandName="document" enctype="multipart/form-data">
<table id="documentTable">
<tr>
<td>
<p>Choose file:</p>
</td>
<td>
<p><input type="file" name="file" path="file" size="40" value="${document.file}"></p>
<p><sf:errors path="file" class="error"/></p>
</td>
</tr>
<tr>
<td colspan="2">
<p class="submit"><input id="submitForm" type="submit" name="commit" value="Go"></p>
</td>
</tr>
</table>
</form:form>
如您所见,表单在提交时会发送一个 Document 对象,该对象由控制器验证并插入到数据库中。此 Document 对象在插入之前将文档的字节存储到 MultipartFile 中。现在我想更新这个 Document 对象,所以 JSP 页面与添加的页面相同,不同之处在于必须在显示页面之前从 DB 加载已经存在的 Document。表单现在填充了文档信息,除了输入文件字段,我不知道为什么没有填充(虽然你可以看到value="${document.file}"
)。问题是用户可能不需要更新文件本身,只需要更新表单上出现的其他关联属性,但是当提交时,所有字段都正确封装在 Document 对象中,除了文件为空并导致验证失败。我希望能够在加载更新文档 JSP 页面时填充文件输入字段,因此如果用户提交表单而不更改此字段,则可以再次发送信息。
我考虑过其他解决方案,例如修改验证器以接受空文件字段,然后再次从数据库或会话中获取信息,但这看起来并不整洁。
你认为什么是好的方法?