我正在Eclipse中使用Struts 1.3.10,我正在开发一个Web应用程序,我正在使用JSP,我正在实现一个JSP,我在那里上传一个文件,但是给我带来了问题。我有下一个代码和配置。
<body>
<html:form action="upload" method="post" enctype="multipart/form-data">
<input type="file" name="fichier" />
<tr>
<td><html:submit property="submit" value="Submit"/></td>
<td align="left"><html:reset/></td>
</tr>
</html:form>
</body>
在Form Bean中,我有
public class uploadForm extends ActionForm {
protected FormFile fichier;
public FormFile getFichier()
{
return fichier;
}
public void setFile(FormFile fichier)
{
this.fichier = fichier;}}
在行动中我有
public class uploadAction extends Action {
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest req,
HttpServletResponse res) throws Exception {
String resultat = null;
FormFile fichier = ((uploadForm) form).getFichier();
String fileName = fichier.getFileName();
System.out.println(fileName);
return mapping.findForward(resultat);
}
}
在struts-config中,我有
<form-beans type="org.apache.struts.action.ActionFormBean">
<form-bean name="uploadForm" type="struts.ActionForm.uploadForm" />
</form-beans><action-mappings type="org.apache.struts.action.ActionMapping">
<action path="/fiche" input="/FormulaireFiche.jsp" scope="request"
name="FicheRenseignementForm" type="struts.action.FicheRenseignementAction">
<forward name="succes" path="/personnel_succes.jsp" redirect="false" />
<forward name="echec" path="/FormulaireFiche.jsp" redirect="false" />
</action></action-mappings>
当我运行应用程序并选择文件时,服务器向我发送异常
javax.servlet.ServletException: java.lang.NullPointerException
org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:286)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462)
javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
因为母亲
java.lang.NullPointerException
struts.action.uploadAction.execute(uploadAction.java:21)
org.apache.struts.chain.commands.servlet.ExecuteAction.execute(ExecuteAction.java:58)
org.apache.struts.chain.commands.AbstractExecuteAction.execute(AbstractExecuteAction.java:67)
org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:51)
org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:304)
org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:283)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462)
javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
3条答案
按热度按时间zqry0prt1#
这里有几个问题:
1)您需要将一个html表单绑定到FormFile对象(属性),就像这样:
<html:file property="fichier"/>
2)setter的名称不正确-它将无法在表单对象中设置值。它必须是
setFichier(FormFile fichier)
3)
<html:submit />
中不需要property="submit"
开始用这些东西解决bug。
cs7cruho2#
html:form
标记中action属性的值应等于您在struts-config.xml
的action-mapping
标记中使用的值。请在action属性中使用/upload
或/fiche
。您可以只使用
<html:submit value="Submit"/>
。由于UploadForm没有属性“submit”,如果您在html:submit
标记中包含property属性,则会出错。将
FormFile fichier;
的访问修饰符更改为public
,以便Action类获取表单对象的引用,并将方法setFile
更改为setFichier
resultat
的值为空。请分配一个转发名称,如succes
。操作标记的名称和输入属性值也应从
FicheRenseignementForm
更改为UploadForm
zf9nrax13#
将
setFile
方法重命名为settersetFichier
。NPE导致Struts无法在提交时设置此字段。