Struts2:将参数传递给动作类不起作用

时间:2015-12-17 08:43:23

标签: java html forms jsp struts2

我正在使用struts 2.3.24

我想将一些参数传递给action类。这是我的链接。

<a id = "errorOid" 
 type = "submit"
 href = "<s:url action="SortIssue"><s:param name="sortField" value="ISSUE_OID"/></s:url>">
    Error Oid
</a>

当我点击链接时,它转到action方法,但sortField总是为空。

这是我的行动:

<action name="SortIssue" method="sortIssue" class="foo.bar.IssueAction">
    <result name="success">/WEB-INF/issue.jsp</result>
    <result name="input">/WEB-INF/issue.jsp</result>
    <result name="login" type="redirectAction">Login</result>
    <interceptor-ref name="user-submit" />
</action>

这是点击链接时调用的方法。

public String sortIssue() throws ServiceFatalException,ServiceExpectedException{
        Log.error(this,"################## inside sort ###################"+sortField);
        return SUCCESS;
    }

我的问题是:

如何从jsp传递参数?

点击链接后还可以获取隐藏参数吗?

注意:当我在迭代器中使用它时,传递参数stuff工作正常。

2 个答案:

答案 0 :(得分:4)

正如Tag Syntax documentation

中所述
  

value是一个Object!

     

大多数情况下,value属性会自动设置,因为名称   属性通常告诉框架调用set的属性   价值。但是,如果有理由直接设置值,那么   建议值是一个对象而不是一个字符串

     

(警告)由于value不是String,因此传递给value的是什么   评估为表达式 - NOT 一个字符串文字。

     

可能错了!

<s:textfield key="state.label" name="state" value="ca"/>
     

如果文本字段传递值属性“ca”,则框架将   寻找名为getCa()的属性。一般来说,这不是我们的意思。   我们要做的是传递一个文字字符串。在表达中   语言,文字放在引号内

     

以正确的方式传递文字值

<s:textfield key="state.label" name="state" value="%{'ca'}" />
     

另一种方法是使用成语value="'ca'",但是,在   在这种情况下,建议使用表达式表示法。

     

[...]

这意味着当您编写value="ISSUE_OID"时,Struts会在值堆栈中搜索名为ISSUE_OID的对象,以及Action中的方法getISSUE_OID()等等。

如果要传递字符串文字,可以使用value="%{'ISSUE_OID'}"或 将您的值放在标记的HTML正文中,因为不会评估HTML正文,并且您放在那里的所有内容都会变成一个字符串。

然后在你的情况下:

<s:param name="sortField" value="%{'ISSUE_OID'}"/>

<s:param name="sortField">ISSUE_OID</param>

答案 1 :(得分:1)

试试这个

<s:url id="errorOid" action="sortIssue">
   <s:param name="sortField">ISSUE_OID</s:param>
</s:url>
<s:a href="%{errorOid}">Error Oid</s:a>

有关param的更多信息,请参阅下文

案例1

<s:param name="sortField">ISSUE_OID</s:param>

值作为 java.lang.String 对象

评估值堆栈

案例2

<s:param name="sortField" value="ISSUE_OID"></s:param>

该值作为 java.lang.Objec t对象计算值堆栈。 有关详细信息,请查看here