Как да изпратя многочастни/формулярни данни с файлови и текстови полета с помощта на 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

проверете локалната променлива на методите за настройка и в registered.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