无法从 Struts2 的操作跳到 Jsp
Cannot skip from an action to a Jsp with Struts2
我做了2个动作,action1是为了更新一些信息,action2是为了检索它。通常,我使用 action2 进行搜索并使用 JSP 进行显示。现在还有点东西,看到JSP后,先进入action1修改一些东西,然后转到action2检索,最后跳到Jsp显示信息。我使用 Struts2 来实现它。但实际上信息并没有改变,我需要刷新网页才能正常显示。起初我猜是缓存导致了这种情况。所以我在 JSP 中添加了一些标签来避免这种情况,并使用 ?time=${time} 重写 url,但仍然是徒劳的。我的代码如下。
MessageAction.java:
public String getMessage() throws Exception{
Map<String, Object> session = ActionContext.getContext().getSession();
Account account = (Account)(session.get("account"));
List<Message> messages = messageBo.getMessageByAccount(account);
session.remove("messages");
session.put("messages", messages);
time = Long.toHexString(new Date().getTime());
System.out.println(time);
return SUCCESS;
}
@Action(value="modifyMessage",
results={
@Result(name="success",location="/getMessage.action",type="redirectAction")})
public String modifyMessage() throws Exception{
HttpServletRequest request = ServletActionContext.getRequest();
String field = request.getParameter("field");
String value = request.getParameter("value");
Integer id = Integer.parseInt(request.getParameter("id"));
messageBo.updateMessageByField(id, field, value);
return SUCCESS;
}
struts.xml:
<action name="getMessage" class="com.ailonger.action.MessageAction" method="getMessage">
<result type="redirect">/room/my_message.jsp?time=${time}</result>
</action>
如何进入action2后直接跳到JSP?
不确定您的要求。如果您尝试将请求从 servlet 转发到另一个资源(servlet,JSP 文件),请使用
forward(ServletRequest request, ServletResponse response)
您永远不应从该操作重定向到 JSP。下面的代码是 redirect
结果类型,它丢失了任何请求属性和 valueStack
来自上一个操作,因此 jsp 视图变得没有模型。为重定向到 jsp.
的新请求创建新的操作上下文
<action name="getMessage" class="com.ailonger.action.MessageAction" method="getMessage">
<result type="redirect">/room/my_message.jsp?time=${time}</result>
</action>
代码应更改为使用默认的 dispatcher
结果类型,并且可以在 xml 配置中省略。
<action name="getMessage" class="com.ailonger.action.MessageAction" method="getMessage">
<result>/room/my_message.jsp?time=${time}</result>
</action>
我做了2个动作,action1是为了更新一些信息,action2是为了检索它。通常,我使用 action2 进行搜索并使用 JSP 进行显示。现在还有点东西,看到JSP后,先进入action1修改一些东西,然后转到action2检索,最后跳到Jsp显示信息。我使用 Struts2 来实现它。但实际上信息并没有改变,我需要刷新网页才能正常显示。起初我猜是缓存导致了这种情况。所以我在 JSP 中添加了一些标签来避免这种情况,并使用 ?time=${time} 重写 url,但仍然是徒劳的。我的代码如下。
MessageAction.java:
public String getMessage() throws Exception{
Map<String, Object> session = ActionContext.getContext().getSession();
Account account = (Account)(session.get("account"));
List<Message> messages = messageBo.getMessageByAccount(account);
session.remove("messages");
session.put("messages", messages);
time = Long.toHexString(new Date().getTime());
System.out.println(time);
return SUCCESS;
}
@Action(value="modifyMessage",
results={
@Result(name="success",location="/getMessage.action",type="redirectAction")})
public String modifyMessage() throws Exception{
HttpServletRequest request = ServletActionContext.getRequest();
String field = request.getParameter("field");
String value = request.getParameter("value");
Integer id = Integer.parseInt(request.getParameter("id"));
messageBo.updateMessageByField(id, field, value);
return SUCCESS;
}
struts.xml:
<action name="getMessage" class="com.ailonger.action.MessageAction" method="getMessage">
<result type="redirect">/room/my_message.jsp?time=${time}</result>
</action>
如何进入action2后直接跳到JSP?
不确定您的要求。如果您尝试将请求从 servlet 转发到另一个资源(servlet,JSP 文件),请使用
forward(ServletRequest request, ServletResponse response)
您永远不应从该操作重定向到 JSP。下面的代码是 redirect
结果类型,它丢失了任何请求属性和 valueStack
来自上一个操作,因此 jsp 视图变得没有模型。为重定向到 jsp.
<action name="getMessage" class="com.ailonger.action.MessageAction" method="getMessage">
<result type="redirect">/room/my_message.jsp?time=${time}</result>
</action>
代码应更改为使用默认的 dispatcher
结果类型,并且可以在 xml 配置中省略。
<action name="getMessage" class="com.ailonger.action.MessageAction" method="getMessage">
<result>/room/my_message.jsp?time=${time}</result>
</action>