【问题标题】:Cannot skip from an action to a Jsp with Struts2使用 Struts2 无法从动作跳转到 Jsp
【发布时间】:2017-06-21 04:53:02
【问题描述】:

我做了 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?

【问题讨论】:

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

标签: java jsp struts2


【解决方案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>

【讨论】:

    【解决方案2】:

    不确定您的要求。如果您尝试将请求从 servlet 转发到另一个资源(servlet、JSP 文件),请使用

    forward(ServletRequest request, ServletResponse response)
    

    【讨论】:

    • 例如我登录我的网站,我必须通过action2来获取信息并把它带到Jsp中,这样我才能看到信息。现在在我看到我想更新一些信息之后,(在 Jsp 中有更新功能)。但是当我在 MySQL 中更新时,Jsp 没有刷新,url 也没有改变,虽然我用 ?time=${time} 重写了它。
    • 在调用 jsp 之前使用更新后的值更新表单 bean。
    猜你喜欢
    • 1970-01-01
    • 2015-06-08
    • 2013-10-24
    • 1970-01-01
    • 2011-01-24
    • 1970-01-01
    • 2013-04-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多