HTTP状态404 - 没有为操作和结果输入定义结果:添加<result type =“input”>阻止提交</result>

时间:2014-07-25 09:23:06

标签: jsp file-upload struts2 struts

我有一张表格,我有:

JSP:

<form name="xyz" action="upload">
    <input type="file" name="upload"/>
    <input type="submit" name="submit" value="submit"/>
</form>

struts.xml

<action name="upload" class="uploadClass" method="saveExcel">
    <result name="success">page1.jsp</result>
    <result name="error">error.jsp</result>
</action>

为此,它给出了一个错误:HTTP状态404 - 没有为动作和结果输入定义结果

如果我将STRUTS.xml修改为:

<action name="upload" class="uploadClass" method="saveExcel">
    <result name="success">page1.jsp</result>
    <result name="error">error.jsp</result>
    <result name="input">page1.jsp</result>
</action>

当我尝试提交表单时,页面会重新加载。

如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

如果您要上传文件,请对表单使用编码multipart/form-data

<form name="xyz" action="upload" enctype="multipart/form-data">
    <input type="file" name="upload"/>
    <input type="submit" name="submit" value="submit"/>
</form>

如果请求未编码到multipart/form-data并且发生文件上传错误,则Struts不接受请求发送的文件。您可以检查JSP中使用s:actionerrors:fielderror标记的错误。使用File Upload Error Messages配置默认消息。注意,如果您的操作有错误并且您调用了默认拦截器堆栈,则workflow拦截器将返回INPUT结果。它给你“刷新”效果。

答案 1 :(得分:0)

错误消息表示尚未为您的操作定义名为input的结果。结果输入是Struts在验证传递给操作的参数时出现的默认结果。

因此,如果验证中存在问题,struts-2框架会在struts.xml中查找“输入”的映射。如果你没有在struts.xml中定义它。它会抛出那个错误,可以'如果你已定义它,它会将你重定向到映射的jsp页面。所以当你第二次提交它时,你已经定义了结果类型输入,它会将你发送到你为它定义page1.jsp的同一页面。所以当您发送到同一页面时,您的页面会重新加载。