2013-08-26 3 views
1

Моя структура распорки проекта выглядит следующим образом: page1 ->action1 ->page2 ->action2 ->page3значения Стопорные между несколькими JSPs и действий в Struts 2

Что мне нужно для значения я вписываться в входной тег в стр. 1 для доступа к действию2.

Вот мой код:

стр.1:

<div class = "container"> 
    <s:form id = "idinput" method = "post" action = "idEntered"> 
     Enter id: <input id = "txtid" name = "txtid" type = "text" /> 
     <input id = "cmdsubmit" name = "cmdsubmit" type = "submit" value = "enter details" /> 
    </s:form> 
</div> 

действие1:

public class AddId extends ActionSupport { 

private int txtid; 
    //getter and setter 

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

}

стр.2:

<div class = "container"> 
    <s:form id = "formvalues" method = "post" action = "formEntered"> 
     <p>Your id entered is: <s:property value = "txtid" /></p> 
     First name: <input id = "txtfname" name = "txtfname" type = "text" /> 
     Last name: <input id = "txtlname" name = "txtlname" type = "text" /> 
     Age: <input id = "txtage" name = "txtage" type = "text" /> 
     <input id = "cmdform" name = "cmdform" type = "submit" value = "submit form" />  
    </s:form> 
</div> 

action2:

public class AddForm extends ActionSupport {  
    private String txtfname; 
private String txtlname; 
private int txtage; 
private int txtid; 
     //getters and setters 

@Override 
public String execute() throws Exception { 

    return "success"; 
} 

}

и отображая все в

PAGE3:

<div class = "container"> 
    ID: <s:property value = "txtid" /><br> 
    first name: <s:property value = "txtfname" /><br> 
    last name: <s:property value = "txtlname" /><br> 
    age: <s:property value = "txtage" /> 
</div> 

это, когда я сталкиваюсь с проблемой, как txtid отображается как null, из которого я сделал вывод, что значение не передаются от page2 к action2

решения я придумал, чтобы использовать

<s:hidden value = "%{txtid}" name = "txtid2 /> 

в моей форме в page2, который позволит мне использовать значение txtid как txtid2 в action2, однако это похоже на взломы, чем на реальное решение, поэтому любые другие предложения приветствуются.

+1

Почему вы используете page-> action вместо action-> page? –

+0

Мне нужно сначала взять идентификатор пользователя, поэтому страница page1 должна отображаться первыми. при отправке страницы1 действие struts называется action1, которое затем отображает page2 –

+0

Но вы отключили action2, в котором вы хотите получить значение в txtid2, поэтому я не понимаю, что вы хотите. –

ответ

3

В ситуации, когда вы хотите сохранить значения полей, переданные из одного действия в другое, вы можете настроить область действия поля. Просто разместите одно и то же поле с геттерами и сеттерами в каждом действии, в вашем случае это будут action1 и action2. Название поля - txtid. Так же как и scope перехватчик не входит в defaultStack, вы должны ссылаться на него в конфигурации действия. Например

<action name="action1" class="com.package.action.AddId"> 
    <result>/jsp/page2.jsp</result> 
    <interceptor-ref name="basicStack"/> 
    <interceptor-ref name="scope"> 
     <param name="key">mykey</param> 
     <param name="session">txtid</param> 
     <param name="autoCreateSession">true</param> 
    </interceptor-ref> 
</action> 
<action name="action2" class="com.package.action.AddForm"> 
    <result>/jsp/page3.jsp</result> 
    <interceptor-ref name="scope"> 
     <param name="key">mykey</param> 
     <param name="session">txtid</param> 
     <param name="autoCreateSession">true</param> 
    </interceptor-ref> 
    <interceptor-ref name="basicStack"/> 
</action> 

Теперь у вас есть рамки с ключом mykey и полем txtid под ним. Предоставление доступа к полю в каждом действии сделает значение поля передачи от одного действия другому. В приведенном выше примере используется basicStack, который является скелетом для стека перехватчиков и не содержит некоторых перехватчиков, включая перехватчик validation. Если вам нужно иметь другие функции для своих действий, вы должны либо построить пользовательский стек, либо ссылаться на другие перехватчики в конфигурации действия.

+0

, это сработало отлично, спасибо за ответ! кажется, что вам нужно вернуться и пересмотреть некоторые из моих основ. –

Смежные вопросы