Как отправить multipart/form-data с файловыми и текстовыми полями с помощью Struts2?

Эта регистрационная форма содержит загрузку файла и текстовые поля. Как с помощью Struts2 отправить параметры формы, а также загрузить файл?

1. register.jsp:

<s:form action = "Register" enctype="multipart/form-data" method="post">
    <s:textfield name="uname" label = "User Name"/>  
    <s:password name ="password" label = "Password"/>
    <s:file name="fileUpload" label="Select a File to upload" size="40" />
    <s:submit/> 
</s:form>

2. RegisterAction:

package user.action;

import java.io.File;

public class RegisterAction 
{
    private String uname,password;
    private File fileUpload;
    private String fileUploadContentType;
    private String fileUploadFileName;

    //getter setters

    public String execute() throws Exception
    {
        return "success";
    }
}

3. struts.xml:

</action>
<action name="Register" class="user.action.RegisterAction">
    <interceptor-ref name="fileUpload">
        <param name="allowedTypes">text/plain</param>
        <param name="maximumSize">10240</param>
    </interceptor-ref> 
    <result name="success">registered.jsp</result>
</action>

4. registered.jsp:

User Name    : <s:property value="uname"/>
File Name    : <s:property value="fileUploadFileName"/> 
Content Type : <s:property value="fileUploadContentType"/> 
File         : <s:property value="fileUpload"/> 

Имя пользователя <s:property value="uname"/> не дает никакого вывода в registered.jsp. Должны ли мы использовать загрузку файла Apache для анализа запроса, чтобы получить значение текстовых полей?


person Chinmay Patel    schedule 08.12.2014    source источник


Ответы (3)


Нет, вы не должны. Загрузка файла Apache является частью Struts2. Перехватчик fileUpload уже включен в defaultStack, поэтому вам не нужно ссылаться на него в конфигурации действия. Если вы хотите переопределить параметры этого перехватчика, то

<action name="Register" class="user.action.RegisterAction">
    <interceptor-ref name="defaultStack">
        <param name="fileUpload.allowedTypes">text/plain</param>
        <param name="fileUpload.maximumSize">10240</param>
    </interceptor-ref> 
    <result name="success">registered.jsp</result>
</action>

Пока необходимые библиотеки добавлены в ваш проект, вы сможете воспользоваться возможностью загрузки файлов в Struts 2.

person Roman C    schedule 08.12.2014

проверьте локальную переменную методов установки и в Register.jsp попробуйте это изменение

User Name <s:property value="uname"/>

с

<s:label name="xyz" value="%{uname}" />
person Govinda Sakhare    schedule 08.12.2014

Спасибо Друзья за внимание к проблеме. У меня есть ответ. На самом деле я сделал ошибку при добавлении перехватчика. я пропустил

<interceptor-ref name="defaultStack"></interceptor-ref>

поэтому мое новое действие после изменения должно быть

  <action name="Register" class="user.action.RegisterAction">
        <interceptor-ref name="fileUpload">
            <param name="allowedTypes">text/plain</param>
            <param name="maximumSize">10240</param>
        </interceptor-ref> 
        <interceptor-ref name="defaultStack"></interceptor-ref>
        <result name="success">registered.jsp</result>
    </action>

Г-н Роман прав, мы должны добавить перехватчик загрузки файлов, только если нам нужно переопределить. Если мы этого не сделаем, он будет загружен.

person Chinmay Patel    schedule 08.12.2014