struts做上传,一直没搞定,头大得很现在

dreamhunter_lan 2008-10-24 11:48:24
小弟在联系写个petstore,在修改pet信息的时候可以修改照片,想用struts上传,我的表单如下

<form action="ware.do" method="get" enctype="multipart/form-data">
<input type="hidden" name="method" value="modify">
<!-- 这里真的是比较难啊,搞了半天 -->
<input type="hidden" name="id" value="${ware.id}">
<TABLE class="tableEdit" border="0" cellspacing="1" cellpadding="0" style="width:580px;">
<TBODY>
<TR>
<!-- 这里是添加、编辑界面的标题 -->
<td align="center" class="tdEditTitle">修改宠物员信息</TD>
</TR>
<TR>
<td>
<!-- 主输入域开始 -->
<table class="tableEdit" style="width:580px;" cellspacing="0" border="0" cellpadding="0">
<tr>
<td class="tdEditLabel" >宠物名</td>
<td class="tdEditContent"><input type="text" name="name" value="${ware.name }">
</td>
</tr>
<tr>
<td class="tdEditLabel" >价格</td>
<td class="tdEditContent"><input type="text" name="price" value="${ware.price }"></td>
</tr>
<tr>
<td class="tdEditLabel" >照片上传</td>
<td class="tdEditContent">
<input type="file" name="photo">
</td>
</tr>
<tr>
<td class="tdEditLabel" >描述</td>
<td class="tdEditContent"><textarea STYLE="font-size:10pt;font-family:verdana;color:#333333" name="description">${ware.description }</textarea></td>
</tr>
</table>
<!-- 主输入域结束 -->
</td>
</TR>
</TBODY>
</TABLE>

<TABLE>
<TR align="center">
<TD colspan="3" bgcolor="#EFF3F7">
<input type="submit" name="saveButton"
class="MyButton" value="保存宠物信息">
<input type="button" class="MyButton"
value="关闭窗口" onclick="window.close()">
</TD>
</TR>
</TABLE>
</form>

我的ActionForm是这样的
public class WareActionForm extends ActionForm {

private int id;

private String name;

private BigDecimal price;

private String photourl;

private FormFile photo;

private String description;

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public BigDecimal getPrice() {
return price;
}

public void setPrice(BigDecimal price) {
this.price = price;
}

public String getPhotourl() {
return photourl;
}

public void setPhotourl(String photourl) {
this.photourl = photourl;
}

public FormFile getPhoto() {
return photo;
}

public void setPhoto(FormFile photo) {
this.photo = photo;
}

public String getDescription() {
return description;
}

public void setDescription(String description) {
this.description = description;
}
}

做修改的代码如下:
public ActionForward modify(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
WareActionForm waf = (WareActionForm) form;
int id = waf.getId();
Ware ware = wareManager.findWare(id);

FormFile photo = waf.getPhoto();
if(photo != null) {
System.out.println(photo.getFileSize());
FileOutputStream fos = new FileOutputStream("D:\\workstation\\spring\\petstore\\WebRoot\\images\\" + photo.getFileName());
fos.write(photo.getFileData());
fos.flush();
fos.close();
}
ware.setName(waf.getName());
//ware.setPhotourl(photo.getFileName());
ware.setPrice(waf.getPrice());
wareManager.modifyWare(ware);

return mapping.findForward("public_modify_success");
}

然后保存修改信息的时候总是出现如下异常:
2008-10-24 11:31:51,468 WARN [org.apache.struts.chain.commands.AbstractExceptionHandler] - Unhandled exception
javax.servlet.ServletException: BeanUtils.populate
at org.apache.struts.util.RequestUtils.populate(RequestUtils.java:469)
at org.apache.struts.chain.commands.servlet.PopulateActionForm.populate(PopulateActionForm.java:50)
at org.apache.struts.chain.commands.AbstractPopulateActionForm.execute(AbstractPopulateActionForm.java:60)
at org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:51)
at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
at org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:304)
at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
at org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:283)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:449)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.IllegalArgumentException: argument type mismatch
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.commons.beanutils.PropertyUtils.setSimpleProperty(PropertyUtils.java:1789)
at org.apache.commons.beanutils.PropertyUtils.setNestedProperty(PropertyUtils.java:1684)
at org.apache.commons.beanutils.PropertyUtils.setProperty(PropertyUtils.java:1713)
at org.apache.commons.beanutils.BeanUtils.setProperty(BeanUtils.java:1019)
at org.apache.commons.beanutils.BeanUtils.populate(BeanUtils.java:808)
at org.apache.struts.util.RequestUtils.populate(RequestUtils.java:467)
... 31 more
我知道这些很长,但小弟真的快疯掉了
...全文
128 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
dreamhunter_lan 2008-10-24
  • 打赏
  • 举报
回复
我已经有了enctype="multipart/form-data",我也知道不匹配,但是在哪里呢?可以确定的是我的问题是
出现在
tr>    
<td class="tdEditLabel" >照片上传</td>
<td class="tdEditContent">
<input type="file" name="photo">
</td>
</tr>

因为我把上面的去了,把实现上传的java代码也去了就没有问题了,各位继续吧
feng8008 2008-10-24
  • 打赏
  • 举报
回复
argument type mismatch
类型不匹配
lihan6415151528 2008-10-24
  • 打赏
  • 举报
回复
需要强制转换!

http://www.roboticfan.com/blog/user_2005/104/archives/2007/200742792456.shtml

这个给楼主参考下!
dreamhunter_lan 2008-10-24
  • 打赏
  • 举报
回复
5楼对了,结贴。没想到犯了这样的错
dreamhunter_lan 2008-10-24
  • 打赏
  • 举报
回复
应该不是BigDecimal的问题,我只要把<input type="file" name="photo">去了就没问题,可是我实在
看不出来哪里不匹配
sgdb 2008-10-24
  • 打赏
  • 举报
回复
把BigDecimal price 换成float price
sgdb 2008-10-24
  • 打赏
  • 举报
回复
把BigDecimal price 换成long price 看看
忙碌的布谷鸟 2008-10-24
  • 打赏
  • 举报
回复
method="post"
dreamhunter_lan 2008-10-24
  • 打赏
  • 举报
回复
自己定一下
debug看了一下,连action都进不去就跑异常了
相当郁闷

67,537

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧