如何将jsp页面[s:iterator]中的对象传递给动作类?

时间:2015-09-06 10:44:29

标签: java jsp struts2 iterator struts-action

我有一个JSP页面,显示一个名为docsFacebook的对象。我需要将此对象传递给动作类以处理其内容。怎么做?

JSP

<s:iterator value="docsFacebook">
    <p>
       <img src="images/fb.png" />
       <b><s:property value="Newspaper"/></b>       
       <s:property value="Date"/></p>               
       <p><s:property value="Message"/></p>              
       <p><a href=<s:property value="Link_url"/>>
       <s:property value="Link_url"/></a>
    </p>
    <br></br>           
</s:iterator>

在同一页面中,我有一个带有动作类链接的按钮..

<a href="<s:url action="display" />">Facebook</a>

如何从该动作类中检索此数据?

struts.xml中

<struts>
    <package name="default" extends="struts-default">
        <action name="doFirstQuery" class="action.FirstQuery">
            <result name="success">success.jsp</result>
            <result name="failure">error.jsp</result>               
        </action>
        <action name="doFollowingQuery" class="action.FollowingQuery">
            <result name="success">success.jsp</result>                         
        </action> 
        <action name="display" class="action.Display">
            <result name="success">dis.jsp</result>                         
        </action>           
    </package>
</struts> 

2 个答案:

答案 0 :(得分:1)

1 - 适当的访问者/变异者:

由于您正在阅读数组,因此您需要在源操作中使用数组getter

public Risultato[] getDocsFacebook(){...}

然后在页面中选择单个元素,因此在目标操作中需要对象设置器

public void setDocsFacebook(Risultato risultato){...}

2 - 发送对象:

要发送对象,您有两个问题:

  • 打印的属性不是表单元素,而是纯文本;然后,您需要使用隐藏字段为其中的每个人发送值:

    <s:property value="foo" />
    <s:hidden    name="foo" />
    
    <s:textfield name="bar" />
    
  • 要从迭代集合中发送单个对象,您需要使用OGNL指定索引。 整篇文章描述得很好in this answer ,请务必仔细阅读。

3 - INPUT结果

您的(非常意大利语本地化)日志告诉您,由于存在某种转换或验证错误,因此会返回INPUT结果。

INPUT与ERROR不同,因为它表示用户插入的数据中存在可恢复的错误,它应该要求用户再次输入它们,而不是例如登陆到错误页面。

我强烈建议您阅读what the INPUT result is

答案 1 :(得分:0)

variablename动作类中创建docsFacebook(某些属性以保存Display值)属性,并为其编写setter和getter方法。

如果docsFacebook的类型为Risultato,那么

Dsiaply动作类

private Risultato variablename;

public Risultato setVariablename(Risultato variablename)
{
     ............
}
public Risultato getVariablename()
{
     .............
}

现在在JSP调用操作类方法

 <a href='display?variablename=<s:property value="docsFacebook"/>'>Facebook</a>

如果点击链接Facebook,系统会调用display操作类方法。

如果docsFacebook的类型为Risultato[],请将Risultato替换为Risultato[]操作类中的Display