h:commandButtonのアクション

このQ&Aのポイント
  • h:commandButtonを使ったwebアプリで、ダイアログの再送信問題が発生しています。
  • テストボタンを押下後にページをリロードすると、情報の再送信を求めるダイアログが表示されます。
  • ダイアログで「はい」を選ぶと、テストボタンの処理が再び実行されてしまいます。初歩的な問題かもしれませんが、どこが間違っているのか教えてください。
回答を見る
  • ベストアンサー

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 ここまで ------------------------------------- ページ表示  ↓ テストボタン押下  ↓ アクションと表示  ↓ ページのリロードを行う  ↓ 情報の再送信を求めるダイアログで「はい」を選択  ↓ テストボタンを押していないのにアクションと表示される。 ページ表示  ↓ ページのリロードを行う  ↓ 情報の再送信を求めるダイアログで「はい」を選択  ↓ 異常なし

  • Java
  • 回答数2
  • ありがとう数2

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

  • ベストアンサー
  • CoMaam
  • ベストアンサー率52% (12/23)
回答No.2

>ページ表示 >  ↓ > テストボタン押下 >  ↓ > アクションと表示 >  ↓ この時点で、表示されているページは初めのページとは異なります。 おそらくサーバーにリクエストを送信している状態だろうと思います。 そこでリロードをかけると、当然再度リクエストを送ろうとします。 しかしながら、初期画面でリロードすることによって情報の再送信を求める ダイアログが出るのはわかりません。 jspのなかでロード時にリクエストを送る記述があるのでは? もしそうなのであれば、今回初期ロード後のリロードのダイアログとアクション後の リロードのダイアログは別物ですので問題視する必要なはないのかなと思います。

k-kun56
質問者

お礼

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

その他の回答 (1)

  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.1

これはJavaの問題ではなく、ブラウザの仕組みです。 リロード というのは 同じページを表示する ではなく、 前回の処理を繰り返す という処理なのです。 つまり、前者のリロードは もう一回アクションを行う という意味で 後者のリロードは もう一回ページを表示する ということになります。

k-kun56
質問者

お礼

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

関連するQ&A

  • JSFでJavaScriptを使用するには?

    JSF初心者の為、頓珍漢な質問で恐縮です。 以下のようなJSFタグを使用したJSPがあるとします。 <%@ page contentType="text/html;charset=Shift_JIS" %> <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%> <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %> <html> <head> </head> <body> <f:view> <h:form> <h:inputText id="number" value="#{myBean.message}"/> <h:commandButton action="#{myBean.doHoge}" value="送信"/> </h:form> </f:view> </body> </html> このJSPに、以下の処理をJavaScriptで実装したいと思っています。 「送信ボタンのOnClickイベントでinputTextに入力された文字をJavaScriptのAlert()関数でポップアップ表示する。」 JSFタグがなければなんてことのない処理ですが、JSFタグを使用している状況でどのようにJavaScriptを使用していいものなのかがよくわかりません。 上記の処理はどのように実装すればいいのでようか? JSFでJavaScriptを使用する方法について参考になるサイトがあれば教えてください。

    • ベストアンサー
    • Java
  • JSFで最初のリクエストで動く処理を実装するには?

    近日、JSF(ver 1.2)でWebシステムを実装することになりJSFの勉強中のものです。 ASP.NET や PHP(Smarty) でWebシステム実装経験があります。 JSFでどう実装すれば良いのかわからないことがあり、詳しい方にお教え頂きたいと考えています・・・! 【質問概要】 JSFで最初のリクエスト時のみに動く処理はどのように実装すればよいのでしょうか? ASP.NETでは Page_Load イベントで Page#IsPostBack を以下の例のように使用すると 最初のリクエスト時のみに動く処理を実装することができました。 ---- 例 ここから ------------------------------------------- void Page_Load() { // 毎リクエスト時に行う処理 if (!IsPostBack) { // 最初のリクエスト時にのみ行う処理 } } ---- 例 ここまで ------------------------------------------- JSFではこれに相当するものが無いでしょうか? 【試してみたこと】 管理Beanのコンストラクタで最初のリクエスト時にのみ行う処理ができるかと思い、 以下のtest.jspを実行し、コンソールにどのように表示されるか試してみました。 ---- test.jsp ここから ------------------------------------- <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="f" uri="http://java.sun.com/jsf/core"%> <%@ taglib prefix="h" uri="http://java.sun.com/jsf/html"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> (中略) <body> <f:view> <h:form> <h:commandButton action="#{Test.clickTest}" value="テストボタン"></h:commandButton><br /> </h:form> </f:view> </body> </html> ---- test.jsp ここまで ------------------------------------- ※Test は 下記 Test.java で実装した管理Bean。スコープはrequest。 ---- Test.java ここから ------------------------------------- public class Test { public Test(){ System.out.println("コンストラクタを通っている。"); } public String clickTest() { System.out.println("ボタンが押された。"); return "clickTest"; } } ---- Test.java ここまで ------------------------------------- <コンソール出力結果> 最初のリクエスト時: コンストラクタを通っている。 テストボタン押下後: コンストラクタを通っている。 ボタンが押された。 このことから、リクエストのたびにコンストラクタが処理されていることが分かりました。 ASP.NETの Page#IsPostBack の様なものがあれば、最初のリクエストかどうかを判別できるのですが・・・! 以上です。 上記のようなコンストラクタを使用する以外でも、なにか良い方法は無いでしょうか? お詳しい方、何卒よろしくお願い申し上げます・・・!

  • JSFについて

    JSFを使おうとしてるのですが <%@page contentType="text/html; charset=Shift_JIS"%> <%@taglib uri="http://java.sun.com/jsf/core" prefix="f"%> <%@taglib uri="http://java.sun.com/jsf/html" prefix="h"%> <html> <head> <title>jsfsample1</title> </head> <body bgcolor="#ffffff"> <h1>JSF サンプル</h1> <f:view> <h:form> <h:outputText value="ようこそJSFへ" /> <h:inputText /> <h:commandButton value="click"/> </h:form> </f:view> </body> </html> 上記の10行目<f:view>でエラーが出るのですが何ででしょうか?? ライブラリやweb.xmlは本を見て所定の場所にコピーしました。

    • ベストアンサー
    • Java
  • htmlでsubmit送信時、actionより前に、scriptを動作させたい

    よろしくお願いします。 formの送信ボタン押下して、action=test.asp と やっていますが、 test.aspが動作する前に 送信ボタンonclickでhtml内に記述したscriptを動作させたいのですが、どうやればいいでしょうか?

  • Functionsタグライブラリの使い方について

    はじめまして。Javaの初心者です。 参考書を読みながらタグの学習をしているのですが、 どうしてもわからないことがあります。 それは、参考書には、例えば、以下のようなコード のように記述して実行すると、 ************************************************* <%@ page contentType="text/html; charset=Shift_JIS" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> <html> <head> <title>Test</title> </head> <body> <c:set var="a" value="aaaaa"/> <p>${fn:toUpperCase(a)}</p> </body> </html> ************************************************* AAAAAと表示されるというようなことが書かれていますが、実際にコードを実行させてみると、 「${fn:toUpperCase(a)}」が表示されてしまいます。 どのようにすれば、参考書のような実行結果が得られるのでしょうか? 現在の実行環境は、Tomcat5.5.17 jdk1.5.0_06を使用しています。どうか教えてください。お願いします。

    • ベストアンサー
    • Java
  • NullPointerException

    Strutsでjspを書きました。下のソースなのですが、どうやらlinkタグがうまくいっていないようなのです。NullPointerになってしまいます。どこが悪いか教えていただけませんか?web.xmlもちゃんと書いてあるし、struts-config.xmlもちゃんと書いたのですが・・・。お願いします。 <%@page contentType="text/html; charset=Shift_JIS" %> <%@ taglib uri="/tags/struts-bean" prefix="bean" %> <%@ taglib uri="/tags/struts-html" prefix="html" %> <%@ taglib uri="/tags/struts-logic" prefix="logic" %> <html:html> <head> <title>top</title> </head> <body> <div align="left"> <hr> <h1><font color="#20B2AA">■ <メニュー画面> ■</font></h1> <hr> <html:link forward="shoppingInitial/Entry"><h3> 登録 </h3></html:link> <html:link forward="shoppingInitial/Browse"><h3> 見る </h3></html:link> </body> </html:html>

    • ベストアンサー
    • Java
  • 教えてください:strutsのhtml:formタグがjspに展開された状態の、actionの値について

    java初心者です。 どなたか教えていただけませんでしょうか? JAVAのstrutsを使用してソフトを作成しています。 JSPに記載した「<html:form action="/authentication" focus="id"> 」 との記述が、WEB(IE)に展開されたソースを見ると、「<form name="AuthenticationForm" method="post" action="/strutsTest/authentication">」 に変換されています。 action="/authentication"と記述しているにもかかわらず、 action="/strutsTest/authentication"と展開されているのですが /strutsTestが自動的に付与されているのは、なぜなのでしょうか? なにか設定するところがあるのでしょうか? ※struts-config.xmlに指定したpathと一致しない為、404NotFoundになるので自動設定しないように変更したいのです。 ちなみに環境は struts-1.3.10 Apache Tomcat 6.0.14 Server EclipsVersion: 3.4.2 pakage名:struts プロジェクト名:strutsTest struts-config.xmlの設定   <form-beans> <form-bean name="AuthenticationForm" type="struts.AuthenticationForm"/> </form-beans> <global-exceptions> </global-exceptions> <global-forwards> <forward name="fail" path="/login.jsp"/> </global-forwards> <action-mappings> <action path="/authentication" name="AuthenticationForm" type="struts.AuthenticationAction" scope="session"> <forward name="success" path="/welcome.jsp"/> <forward name="fail" path="/login.jsp"/> </action> </action-mappings> login.jsp <%@ page contentType="text/html; charset=Windows-31J" %> <%@ taglib uri="/tags/struts-bean" prefix="bean" %> <%@ taglib uri="/tags/struts-logic" prefix="logic" %> <%@ taglib uri="/tags/struts-html" prefix="html" %> <html:html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Windows-31J"/> <title>ログイン画面</title> </head> <body> <html:errors/> ID・パスワードを入力してください。 <html:form action="/authentication" focus="id"> <html:text property="id" size="16"/> <br> <html:password property="pas" size="16" redisplay="false" /> <br> <html:submit property="submit" value="送信"/> <html:reset value="リセット"/> </html:form> </body> </html:html> 動作順は、login.jsp => AuthenticationAction.class => welcome.jsp です。 よろしくお願いします。

  • strutsでフレームの分割ができません。

    strutsで、 http://struts.wasureppoi.com/taglib/03_frame.html を見ながらフレームの分割を下記のように行おうとしていますが、エラーが表示されます。 ソース ---- <%@ page language="java" contentType="text/html; charset=Windows-31J" pageEncoding="Windows-31J" %> <%@ taglib uri="/tags/struts-bean" prefix="bean" %> <%@ taglib uri="/tags/struts-logic" prefix="logic" %> <%@ taglib uri="/tags/struts-html" prefix="html" %> <%@ taglib uri="/tags/struts-nested" prefix="nested" %> <html:html> <head> <title>テスト</title> </head> <frameset cols="30%,*"> <html:frame page="l.jsp"/> <html:frame page="r.jsp"/> </frameset> </html:html> ---- エラーメッセージ ---- HTTPステータス 500 - type 例外レポート メッセージ 説明 The server encountered an internal error () that prevented it from fulfilling this request. 例外 org.apache.jasper.JasperException: Exception in JSP: /index08.jsp:13 10: <title>テスト</title> 11: </head> 12: <frameset cols="30%,*"> 13: <html:frame page="l.jsp"/> 14: <html:frame page="r.jsp"/> 15: </frameset> 16: </html:html> Stacktrace: org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:451) 原因 java.lang.NullPointerException org.apache.struts.taglib.TagUtils.pageURL(TagUtils.java:1070) ---- 別のページを見ると、 <html:frame page="l.jsp" name="hidari"/> とname属性を宣言しているようですが、同様に記述してみると、スコープが無いとエラーが出てしまいます。 環境は、  WindowsXP  Eclipse3.3  Tomcat5.5  struts-1.3.8  JDK1.5 です。 どのように記述すべきか、検索してもヒットしなかったので、恥かしながらここで質問させて頂く事にしました。 どのように直すべきか、分かる方がいらっしゃいましたらご教授頂けないでしょうか?  また、オススメのStrutsの本がありましたら、こちらも教えて頂けたら幸いです。 宜しくお願い致します。

    • ベストアンサー
    • Java
  • eclipse+Struts+Tomcat

    eclipse+Struts+Tomcatという環境で開発を行おうとしています。 環境は以下のとおりです。 Pleiades all in one 3.5 struts 1.3.10 Tomcat 6.0.29 まず手始めに、一番シンプルなフォームに送信ボタンが1つあるだけのものを作ろうとしているのですが、以下のエラーが出て先に進めません。 The server encountered an internal error () that prevented it from fulfilling this request. 書いたソースは下記のとおりです。 <?xml version="1.0" encoding="UTF-8" ?> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %> <%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %> <%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>hogehoge</title> </head> <body> <html:form action="/HOGE" method="post"> <html:submit value="送信" /> </html:form> </body> </html> これをhtmlタグを一切使わずに書くと何のエラーもなく表示されます。 eclipseでhtmlタグを使用しない開発は考えられないのですが、今回Javaが初めてで何がどう悪いのかの見当もつきません。 プロジェクト自体は、「動的Webプロジェクト」で作成しています。 どなたかご存知の方はご教示いただければと思います。 よろしくお願いいたします。

    • ベストアンサー
    • Java
  • Struts 1.3 でbeanタグが認識されない

    Struts初心者です。 Struts1.3で以下のようなJSPを作成していますが、 "bean:write"のところで、"bean"に対応するtaglibディレクトリが存在しないかTLDファイルが見つかりません。 とエラーになります。 <%@ page contentType="text/html;charset=Windows-31J" %> <%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %> <%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %> ・ ・ ・ <html:html> <head> <title>○○○○○○○○</title> </head> <body> <h1>○○○○○○○○</h1> ●●●●<bean:write name="xxxx" property="id" />! </body> </html:html> "html"の方はエラーになりません。 ケアレスミスのような気がしていますので、どなたか教えていただけると嬉しいです。

専門家に質問してみよう