こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

h:commandButtonのアクション

現在jsf Beanを使ったwebアプリを書いています。

h:commandoButtonで定義したテストボタンを押下後
ページのリロードを行うと
情報の再送信を求めるダイアログが表示されます。
ここで「はい」を選ぶとテストボタン押下の処理が再び勝手に走ります。

テストボタン押下前にはリロードしても何も動作はしません。

もしかして初歩的な所で間違っているかも知れませんが
お気づきの点有りましたらお教え下さい。

以下がサンプルプログラムと動作時の流れです。

◎test.jsp-----------------------------------
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html"%>

(中略)

<body>
<f:view>
<h:form>
 <h:commandButton action="#{test.action}" value="テスト"/></h:form>
</f:view>
</body>
</html>
◎test.jsp-----------------------------------

※test は スコープをsessionで実装した管理Beanで下記 Test.java。

◎Test.java-----------------------------------
public class Test {
 public Test(){
 }

 public String action() {
  System.out.println("アクション");
  return "action";
 }
}
◎Test.java ここまで -------------------------------------
ページ表示
 ↓
テストボタン押下
 ↓
アクションと表示
 ↓
ページのリロードを行う
 ↓
情報の再送信を求めるダイアログで「はい」を選択
 ↓
テストボタンを押していないのにアクションと表示される。

ページ表示
 ↓
ページのリロードを行う
 ↓
情報の再送信を求めるダイアログで「はい」を選択
 ↓
異常なし

投稿日時 - 2011-06-16 19:30:07

QNo.6814261

困ってます

質問者が選んだベストアンサー

>ページ表示
>  ↓
> テストボタン押下
>  ↓
> アクションと表示
>  ↓
この時点で、表示されているページは初めのページとは異なります。
おそらくサーバーにリクエストを送信している状態だろうと思います。

そこでリロードをかけると、当然再度リクエストを送ろうとします。


しかしながら、初期画面でリロードすることによって情報の再送信を求める
ダイアログが出るのはわかりません。
jspのなかでロード時にリクエストを送る記述があるのでは?
もしそうなのであれば、今回初期ロード後のリロードのダイアログとアクション後の
リロードのダイアログは別物ですので問題視する必要なはないのかなと思います。

投稿日時 - 2011-06-20 13:01:35

お礼

ありがとうございます。リロードまでの流れをもう一度しっかり追いたいと思います。

投稿日時 - 2011-07-03 15:00:25

ANo.2

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

これはJavaの問題ではなく、ブラウザの仕組みです。

リロード
というのは
同じページを表示する
ではなく、
前回の処理を繰り返す
という処理なのです。

つまり、前者のリロードは
もう一回アクションを行う
という意味で
後者のリロードは
もう一回ページを表示する
ということになります。

投稿日時 - 2011-06-17 14:19:09

お礼

ありがとうございました。
webの仕組みの基本的なところでしたね…

投稿日時 - 2011-07-03 14:59:36

あなたにオススメの質問