【问题标题】:Struts2 - Access from JSP to Action variablesStruts2 - 从 JSP 访问动作变量
【发布时间】:2015-06-08 09:43:22
【问题描述】:

Struts2出了点小问题,不知道为什么不行……

我想通过 Action 类在两个 JSP 之间传递 2 个变量:

view1.jsp:

<s:form action="myAction">
   <input id="var1" name="var1" type="text" />
   <input id="var2" name="var2" type="text" />
   <button type="submit"> Ok </button>
</s:form>

-> var1 和 var2 是我要传递给 Action 类的变量

struts.xml:

<action name="myAction" class="MyAction" method="execute">
    <result name="success">view2.jsp</result>
</action>

Action.java:

public class MyAction extends DefaultActionSupport
{
    private String var1;
    private String var2;

public String execute() throws Exception
{
    // ... Some actions ...
    return SUCCESS;
}

// Getters & Setters for var1 and var2 (generated by Eclipse)
public String getVar1()
{
    return var1;
}

public void setVar1(String var1)
{
    this.var1 = var1;
}

public String getVar2()
{
    return var2;
}

public void setVar2(String var2)
{
    this.var2 = var2;
}

-> 这可以正常工作;如果我将“System.out.print”与 getter 放在一起,它会向我展示 var1 (content1) 和 var2 (content2) 的良好值

view2.jsp:

Values of var1 = <s:property value="var1" />
Values of var2 = <s:property value="var2" />

Textfield with var1 in default-value : <s:textfield value="%{var1}" />
Textfield with var2 in default-value : <s:textfield value="%{var2}" />

-> 这里有一个问题: 我无法获取 var1 和 var2 的内容!
-> &lt;s:property value="var1" /&gt;&lt;s:textfield value="%{var1} 返回“null”

我的错误在哪里?我不明白...我按照网上其他人所说的...

谢谢!

【问题讨论】:

  • 你能给我们你的getter和setter吗?
  • 嗨!感谢您的评论我已经编辑了我的消息,其中包含 Getter 和 Setter 的内容
  • 你有没有把view2.jsp的代码放在form标签里。喜欢
    ...
  • 服务器控制台是否出现异常
  • @Anshuman :在 View2.jsp 中,我是这样写的:&lt;s:form action="myAction"&gt; &lt;s:property value="var1" /&gt; &lt;s:textfield value="%{var1}" /&gt; &lt;/s:form&gt; >>> 放在表单标签中也不起作用;我有null 值而不是实际值@Code2Interface:我在服务器控制台中什么都没有;我在控制台中得到的唯一结果是:System.out.println("value of var1 = " + getVar1());` 控制台中显示的值是正确的......但它是“null”在 JSP 中

标签: java jsp variables struts2 action


【解决方案1】:

我终于找到了问题的答案!
要获得var1var2的值,我必须使用以下几行:

view1.jsp:

<s:form action="myAction">
   <input id="var1" name="var1" type="text" />
   <input id="var2" name="var2" type="text" />
   <button type="submit"> Ok </button>
</s:form>

struts.xml:

<action name="myAction" class="MyAction" method="execute">
    <result name="success">view2.jsp</result>
</action>

Action.java:

public class MyAction extends DefaultActionSupport{
    private String var1;
    private String var2;

    public String execute() throws Exception{
        // ... Some actions ...

        ActionContext.getContext().getSession().put("var1", getVar1());
        ActionContext.getContext().getSession().put("var2", getVar2());

        return SUCCESS;
    }

    // Getters & Setters for var1 and var2 (generated by Eclipse)
    public String getVar1(){
        return var1;
    }

    public void setVar1(String var1){
        this.var1 = var1;
    }

    public String getVar2(){
        return var2;
    }

    public void setVar2(String var2){
        this.var2 = var2;
    }
}

view2.jsp:

Values of var1 = <s:property value="#session.var1" />
Values of var2 = <s:property value="#session.var2" />

//To transform var1 and var2 into JSP variables :

<s:set var="var1 " value="#session.var1 " />
<s:set var="var2 " value="#session.var2" />
<jsp:useBean id="var1 " type="java.lang.String" />
<jsp:useBean id="var2 " type="java.lang.String" />

<%
    String myString1 = var1;
    String myString2 = var2
%>

【讨论】:

  • 绝对不是解决方案。
  • @AndreaLigios 我怎样才能做得更好?
  • 用getter和setter代替session,这里没用。在使用会话时,顺便说一句,使用 SessionAware(例如在您的 DefaultActionSupport 中),这比从 ActionContext 获取它更可取。阅读更多:*.com/a/19540712/1654265
  • 如果你的 Interceptor Stack 是默认的,或者它配置正确,并且你不能通过 setter 自动获取你的属性,你可能对属性的名称和大小写有一些问题,例如,如果var1 和 var2 是 vAr1 和 vAr2,Eclipse 无法正确生成 getter 和 setter:*.com/a/27928298/1654265