我在一个项目中,比如一个注册页面,里面有一些必填的信息还有用户选择他们自定义自己的头像,但我在那的表单页面是调用UserAction类里的save方法,但在他们自己选择头像时,也要调用一个UploadAction把它上传到我的服务器里。
想问的就是在点提交时,如何调用这两个Action,即把他们的信息存入数据库,也要上传图片在我的服务器上..能有DEMO最好。。没分了,,求大虾帮忙,感激不尽。

解决方案 »

  1.   

    action:
            //定义下面的三个变量获取要上传的图片
            private String upFileFileName;
    private String upFileContentType;
    private File upFile;

    public String getUpFileFileName() {
    return upFileFileName;
    }
    public String getUpFileContentType() {
    return upFileContentType;
    }
    public File getUpFile() {
    return upFile;
    }
    public void setUpFileFileName(String upFileFileName) {
    this.upFileFileName = upFileFileName;
    }
    public void setUpFileContentType(String upFileContentType) {
    this.upFileContentType = upFileContentType;
    }
    public void setUpFile(File upFile) {
    this.upFile = upFile;
    }在UploadAction中添加下面的代码
                     File data = new File(new File("上传的路径"),upFileFileName);
    try {
    if (!data.getParentFile().exists()) {
    data.getParentFile().mkdirs();
    }
    if(data.exists()){
    data.delete();
    }
    FileUtils.copyFile(upFile, data);
                                } catch (Exception e) {
    super.addActionMessage("上传数据文件失败...");
    e.printStackTrace();
    }
     页面上面添加          <input id="upFile"  name="upFile" type="file" />
    一定是ok的,这是我这边的例子。
      

  2.   

    2.Action类
    package com.sterning;import java.io.File;import javax.servlet.ServletContext;import org.apache.commons.io.FileUtils;
    import org.apache.struts2.util.ServletContextAware;import com.opensymphony.xwork2.ActionSupport;public class StrutsFileUpload extends ActionSupport implements
            ServletContextAware {    private File upload;// 实际上传文件    private String uploadContentType; // 文件的内容类型    private String uploadFileName; // 上传文件名    private String fileCaption;// 上传文件时的备注    private ServletContext context;    public String execute() throws Exception {        try {
                
                String targetDirectory = context.getRealPath("/upload");
                String targetFileName = uploadFileName;
                File target = new File(targetDirectory, targetFileName);
                FileUtils.copyFile(upload, target);            
                
                setUploadFileName(target.getPath());//保存文件的存放路径
            } catch (Exception e) {            addActionError(e.getMessage());            return INPUT;
            }        return SUCCESS;    }    public String getFileCaption() {
            return fileCaption;
        }    public void setFileCaption(String fileCaption) {
            this.fileCaption = fileCaption;
        }    public File getUpload() {
            return upload;
        }    public void setUpload(File upload) {
            this.upload = upload;
        }    public String getUploadContentType() {
            return uploadContentType;
        }    public void setUploadContentType(String uploadContentType) {
            this.uploadContentType = uploadContentType;
        }    public String getUploadFileName() {
            return uploadFileName;
        }    public void setUploadFileName(String uploadFileName) {
            this.uploadFileName = uploadFileName;
        }    public void setServletContext(ServletContext context) {
            this.context = context;
        }}
      

  3.   

    上传页面:upload.jsp<%@ page language="java" contentType="text/html; charset=GB2312"%>   
    <%@ taglib prefix="s" uri="/struts-tags" %>   
    <html>
        <head>
            <title>文件上传示例</title>
            <link href="<s:url value="/css/main.css"/>" rel="stylesheet"
                type="text/css" />    </head>    <body>        <s:actionerror />
            <s:fielderror />
            <s:form action="doUpload" method="POST" enctype="multipart/form-data">
                <tr>
                    <td colspan="2">
                        <h1>
                            文件上传示例
                        </h1>
                    </td>
                </tr>            <s:file name="upload" label="上传的文件" />
                <s:textfield name="fileCaption" label="备注" />
                <s:submit value="上   传"/>
            </s:form>
        </body>
    </html>上传成功页面:upload_success.jsp<%@ page language="java" contentType="text/html; charset=GB2312"%>  
    <%@ taglib prefix="s" uri="/struts-tags"%>
    <html>
        <head>
            <title>上传成功</title>
            <link href="<s:url value="/css/main.css"/>" rel="stylesheet"
                type="text/css" />
        </head>    <body>
            <table class="wwFormTable">
                <tr>                <td colspan="2">
                        <h1>
                            上传成功
                        </h1>
                    </td>
                </tr>            <tr>
                    <td class="tdLabel">
                        <label for="doUpload_upload" class="label">
                            内容类型:
                        </label>
                    </td>
                    <td>
                        <s:property value="uploadContentType" />
                    </td>
                </tr>            <tr>
                    <td class="tdLabel">
                        <label for="doUpload_upload" class="label">
                            文件路径:
                        </label>
                    </td>
                    <td>
                        <s:property value="uploadFileName" />
                    </td>
                </tr>
                <tr>
                    <td class="tdLabel">
                        <label for="doUpload_upload" class="label">
                            临时文件:
                        </label>
                    </td>
                    <td>
                        <s:property value="upload" />
                    </td>
                </tr>            <tr>
                    <td class="tdLabel">
                        <label for="doUpload_upload" class="label">
                            备注:
                        </label>
                    </td>
                    <td>
                        <s:property value="fileCaption" />
                    </td>
                </tr>
            </table>    </body>
    </html>
      

  4.   

    struts.xml<?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
        "http://struts.apache.org/dtds/struts-2.0.dtd"><struts>
        <constant name="struts.devMode" value="true" />
        <constant name="struts.i18n.encoding" value="GB2312" />
     
        <package name="NG" namespace="/" extends="struts-default">
            <action name="showUpload">
                <result>/upload.jsp</result>
            </action>
            
            <action name="doUpload" class="com.sterning.StrutsFileUpload">
                <result name="input">/upload.jsp</result>
                <result>/upload_success.jsp</result>
            </action>
        </package></struts>
    5.web.xml<?xml version="1.0" encoding="UTF-8"?>
    <web-app id="WebApp_ID" version="2.4"
        xmlns="http://java.sun.com/xml/ns/j2ee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">    <display-name>customization</display-name>    <filter>
            <filter-name>struts-cleanup</filter-name>
            <filter-class>
                org.apache.struts2.dispatcher.ActionContextCleanUp
            </filter-class>
        </filter>  
        <filter>
            <filter-name>struts2</filter-name>
            <filter-class>
                org.apache.struts2.dispatcher.FilterDispatcher
            </filter-class>
        </filter>
        <filter-mapping>
            <filter-name>struts-cleanup</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping> 
        <filter-mapping>
            <filter-name>struts2</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping></web-app>
      

  5.   

    先调用1个action,信息都传进去,执行完毕,带上需要的信息转向另一个action
    如果lz需要详细代码,请加qq群:90283079
      

  6.   

    提供两种思路:
    1,必填的信息和头像放在同一个action里
    2,通过<result type="chain">跳转到另一个Action
      

  7.   

    可以这样去做,不必要有两个Action,一个都行的,在一个Action中先执行注册的部分,注册成功后再保存头像~
    思路:一个Action处理两个事务。
      

  8.   

    对于图片上传可以采用jquery的form插件来异步上传,在回调函数里将从后台获得的图片Url设置到页面的隐藏域中,最后点击注册的时候只需要保存图片的url到相关的表中即可http://blog.csdn.net/zxingchao2009/article/details/6534261
      

  9.   

    已解决,是一个ACTION的,本来两个ACTION也解决了,但是需求比较复杂。还是改成一个ACTION了。谢谢楼上的各位,散分。