0

Webアプリでフォーラムを作成しています。新しいスレッドを検索して作成するためのすべてのトピックとボタンを表示するメインページがあります。ユーザーがこの最後のボタンをクリックすると、新しいトピックのデータを入力するためのフォームが表示されます。ユーザーが[送信]をクリックすると、この新しいスレッドがDBに保存され、メインページを表示するアクションにリダイレクトされます。

< 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>

問題は、新しいトピックがDBとログに2回挿入されることですjava.lang.IllegalStateException

BDにオブジェクトを挿入するよりもサービス呼び出しを実行した後にデバッグすると、プログラムの実行はメソッドの先頭に戻ります。そのため、2回挿入されています。

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);を実行した後。Date d = new Date();に戻ります。

誰もが理由を知っていますか?

4

1 に答える 1

0

これが起こっているかどうかは、あなたの jsp コードを見ないと確かなことは言えませんが、実際には、アクションが IE で 2 回実行され、Firefox、Chrome、Opera では 1 回だけ実行されるという問題がありました。

エンジニアの 1 人が onclick イベントをフォーム送信ボタンに追加し、クリックするとボタンが消えるようにしました。document.forms[0].submit();しかし、彼はまた、javascript に呼び出しを含めました。IEのみで、これによりアクションが 2 回実行されていました。

そのため、通常の HTML の上で javascript submit を呼び出して、誤ってフォームを 2 回送信していないことを確認してください<input type="submit" value="Submit" />

于 2012-05-09T14:12:09.043 に答える