Struts如何使用对象

时间:2015-06-04 18:52:46

标签: java ajax jsp struts2

我有一个名为Brand的简单实体:

public class Brand{
    private long id;
    private String name;
    //getters and setters
}

我有一个显示此数据的jsp:

        <p>
            <label for="id"><s:text name="brand.view.id" /></label>
            <c:out value="${requestScope.brand.id}"></c:out>
        </p>
        <p>
            <label for="name"><s:text name="brand.view.name" /></label>
            <c:out value="${requestScope.brand.name}"></c:out>
        </p>
        <p>
            <s:a action="edit_display" namespace="/brand"><s:text name="brand.view.button.edit" />
            </s:a>
        </p>

在这个jsp页面中,你会看到有一个按钮&#34;编辑&#34;这将使用户得到编辑表格。我希望这个表单填充品牌数据。

现在在struts.xml我有下一个映射:

<package name="brand" namespace="/brand" extends="struts-default">
        <action name="*_display">
            <result name="success" type="dispatcher">/WEB-INF/view/brand/{1}.jsp
            </result>
        </action>
        <action name="view" class="com.example.action.brand.ViewBrandAction">
            <result name="success">/WEB-INF/view/brand/view.jsp</result>
        </action>
        <action name="edit" class="com.example.action.brand.EditBrandAction">
            <result name="success">/WEB-INF/view/brand/edit.jsp</result>
        </action>
</package>

现在逻辑是下一个:当用户点击/brand/edit_display链接时,将不会调用任何操作,因此将显示空表单。

如果我想在jsp&#39;之间传递对象,我有哪些选项?动作链接,编辑页面上的ajax,另一个动作PopulateEditBrandAction,构建查询参数字符串或者可能有更好的东西?

因为我知道用户想要编辑的对象 - 我可以简单地传递它吗?

1 个答案:

答案 0 :(得分:1)

对edit_display的调用会创建一个带有新操作上下文的新请求。如果您希望不同的请求共享相同的数据,则必须使用该会话。

Struts2的方法是在你的Action中实现org.apache.struts2.interceptor.SessionAware

将对象保存在ViewBrandAction

userSession.put("some_namespace_brand", brand);

然后,您可以使用以下命令访问jsp中的对象:

<s:property value="#session.some_namespace_brand.id" />

或者实现你所谓的PopulateEditBrandAction来获取对象:

brand = (Brand) userSession.get("some_namespace_brand");

请务必阅读相关文档,因为它解决了通过请求参数访问会话的安全风险。 https://struts.apache.org/docs/http-session.html