我需要在项目更新后保持同一页面,但我需要项目ID才能知道成功的去向。我尝试了几个例子:
第一个:
<action
name="add-item"
method="addItem"
class="com.deveto.struts.actions.ItemsAction" >
<interceptor-ref name="defaultStack"/>
<result name="success" type="redirectAction">
<param name="actionName">show-update-item</param>
<param name="itemId">${itemId}</param>
</result>
</action>
第二个:
With an Action variable and setter & getter methods.
和
<action
name="add-item"
method="addItem"
class="com.deveto.struts.actions.ItemsAction" >
<interceptor-ref name="defaultStack"/>
<result name="success" type="redirectAction">show-update-item</result>
</action>
第三个:
With request.setAttribute("itemId", itemId); and request.getAttribute("itemId");
和
<action
name="add-item"
method="addItem"
class="com.deveto.struts.actions.ItemsAction" >
<interceptor-ref name="defaultStack"/>
<result name="success" type="redirectAction">show-update-item</result>
</action>
第四个:
With an Action variable and setter & getter methods.
和type =“chain”
<action
name="add-item"
method="addItem"
class="com.deveto.struts.actions.ItemsAction" >
<interceptor-ref name="defaultStack"/>
<result name="success" type="chain">show-update-item</result>
</action>
最终,Action是一个,show-update-item.action。
但所有这些都给了我相同的空结果。
有任何建议吗?
例如:show-update-item.action?itemId = 33(itemId的getParameter) - &gt;编辑一些文本字段 - &gt;提交(请求中itemId = 33) - &gt;关于成功的redirectAction - &gt; show-update-item.action(这里当我尝试getAttribute时它为null)
答案 0 :(得分:2)
如果我理解正确,在第一个操作选择了一个项目后,您将使用不同的操作停留在同一页面上。如果是这种情况,您的第一个操作定义应该有效:
<action
name="add-item"
method="addItem"
class="com.deveto.struts.actions.ItemsAction" >
<interceptor-ref name="defaultStack"/>
<result name="success" type="redirectAction">
<param name="actionName">show-update-item</param>
<param name="itemId">${itemId}</param>
</result>
</action>
现在要说的是,你需要确保在itemId的两个动作中都有访问器方法(我们称之为动作1和动作2)。
在操作1中,$ {itemId}正在通过getter进行检索,并且在操作2中{$ itemId}应该通过setter方法设置。
另一种选择是考虑使用sessionaware。只需在操作1中设置会话变量,并在操作2中检索会话变量,如果您担心开销,则将其从会话中删除。我倾向于经常使用会话。
答案 1 :(得分:1)
与Russel建议一样,使用此操作:
<action
name="add-item"
method="addItem"
class="com.deveto.struts.actions.ItemsAction" >
<interceptor-ref name="defaultStack"/>
<result name="success" type="redirectAction">
<param name="actionName">show-update-item</param>
<param name="itemId">${itemId}</param>
</result>
</action>
确保在ItemsAction上有访问器方法。确保使用它们来获取“itemId”的值而不是“getAttribute”。
public String getItemId() {
return itemId;
}
public void setItemId(String itemId) {
this.itemId = itemId;
}
验证最终重定向实际发生时,您确实在浏览器的地址栏中看到“show-update-item.action?itemId = 33”。如果查询中没有传递“itemId”,那么绝对没有办法获得“itemId”的值。