2017-06-21 63 views
0

我做了2个动作,动作1旨在更新一些信息,动作2是检索它。通常,我使用action2来搜索并显示一个JSP。现在看到JSP之后还有更多的东西,首先进入action1来修改某些东西,然后到action2去检索,最后跳到Jsp来显示信息。我使用Struts2来实现它。但实际上信息没有改变,我需要刷新网页才能正常显示。起初我想这是导致这种情况的缓存。所以我在JSP中添加了一些标签以避免这种情况,并使用?time = $ {time}重写url,但仍然徒劳无功。我的代码如下。使用Struts2无法从动作跳转到Jsp

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> 

如何进入1动作后直接跳转至JSP?

+0

为什么混合注释和struts.xml中的动作?什么是'messageBo.updateMessageByField(id,field,value);'在做什么?发布你的jsp。 –

回答

1

你不应该从动作重定向到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> 
0

不知道你的要求。如果你想转发来自一个servlet到其他资源(servlet中,JSP文件)的请求,然后用

forward(ServletRequest request, ServletResponse response) 
+0

例如,我登录我的网站,我必须通过action2来获取信息并将它带到Jsp,以便我可以看到信息。现在我看到我想更新一些信息后(在Jsp中有更新函数)。但是,当我在MySQL中更新时,Jsp不会刷新,并且url不会更改,尽管我用?time = $ {time}重写了它。 – Saeron

+0

在调用jsp之前用动作中的更新值更新表单bean。 – jAnA