struts 2重定向java.lang.IllegalStateException

时间:2012-05-09 07:50:50

标签: struts2

我正在web app创建一个论坛。我有一个主页面,我显示所有主题和按钮来搜索和创建新线程。如果用户单击最后一个按钮,则会显示一个表单以输入新主题的数据。当用户单击“提交”时,我将此新线程存储在数据库中,然后重定向到显示主页面的操作:

< action name="showForum" class="es.busco.colegio.actions.ForumAction" method="show">
    < result name="success">/WEB-INF/jsp/forum.jsp< /result>
< /action>

< action name="newTopic" class="es.busco.colegio.actions.ForumAction" method="newTopic">
    < result name="success">/WEB-INF/jsp/newTopic.jsp< /result>
< /action>

< action name="createTopic" class="es.busco.colegio.actions.Forumction" method="insert">
    < result name="success" type="redirect">http://www.buscocolegio.com/Colegio/showForum.action< /result>
</ action>

问题是新主题在数据库和日志java.lang.IllegalStateException

中插入了两次

当我调试时,我看到执行服务调用后比在BD中插入对象,程序执行回到方法的开头,这就是为什么它被插入两次:

try{
        Date d=new Date();
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
        String s=sdf.format(d);         
        Date d1=sdf.parse(s);
        topic.setDate(d1);
        topic.setText(topic.getText().replaceAll("\n", "<br>"));
        topicService.createTopic(topic);
    }catch (Exception ex){
        logger.error("Error: "+ex,ex);
        return Action.ERROR;
    }
    return Action.SUCCESS;
} 

所以在执行topicService.createTopic(topic)之后;它回到日期d =新日期();

任何人都知道为什么???

1 个答案:

答案 0 :(得分:0)

我无法在没有看到您的jsp代码的情况下确定是否正在发生这种情况,但实际上我确实遇到过在IE中执行两次且在Firefox,Chrome和Opera中只执行一次的问题

我们的一位工程师已将onclick事件添加到表单提交按钮,该按钮会在单击时使按钮消失。但是,他还在javascript中添加了document.forms[0].submit();调用。在IE only 中,这导致操作执行两次。

因此,请务必通过在普通HTML <input type="submit" value="Submit" />之上调用javascript提交来检查您是否意外提交表单。