• 締切済み

sturtsとJSF

こんばんは。jsp、struts2の勉強をしているのですが、理解出来ないところがあるのでご教授願います。 以下のようなサンプルソースがあります。 ******************************** <!-- 1 <%@ page language="java" contentType="text/html; charset=UTF-8"  pageEncoding="UTF-8"%> 2 <%@ taglib prefix="s" uri="/struts-tags" %> 3 <html> 4 <body> 5 <s:form> 6   <s:radio name="cmd_radio" list="#{'1':'おはよう','2':'こんにちは','3':'こんばんは'}"> 7 <s:property value=”%{message}”/> 8 <s:submit method="show" value="クリック"/> 9 </s:form> 10 </body> 11 </html> --> ******************************** まず、6行目のlist="#{'1':'おはよう','2':'こんにちは','3':'こんばんは'}、#{}はJSFのEL式と調べたら書いていたのですが、StrutsタグでJSFが併用できるのと言うことでしょうか?そしてこのタグの動きは#{}の中の要素をループさして、HTMLタグを生成していると言う認識で良いのでしょうか。 もう1点7行目のvalue=”%{message}”ですが、変数messageはアクションクラスのメンバ変数で、showメソッドの中で選択されたラジオボタンの値がセットされます。messageのsetter、getterメソッド共にありますが、showメソッドでは message = "選択されたラジオボタンの値"; となっています。 value=”%{message}”ではなく、name = "message" にして、setMessage("選択されたラジオボタンの値"); としてはだめなのでしょうか。それと、%{}はstrutsのEL式なのでしょうか。 周りにstrutsに詳しい方がおらず、困っています。 初歩的な事で申し訳ありませんが、宜しくお願いします。

  • Java
  • 回答数1
  • ありがとう数0

みんなの回答

  • hatimiti
  • ベストアンサー率68% (26/38)
回答No.1

私も詳しくないので詳細な解説はできませんが アドバイス程度に、、、 #{}がJSFのものかはちょっとわからないのですが、 動作としては、その場でMapオブジェクト(key=1, val=おはよう)を作って、ラジオボタンのvalueとラベルに展開されています。 struts2のカスタムタグはちょっと特殊で、OGNL式が記述できます。 %{}の中にOGNL式を記述して、値の取得などが可能です。 OGNLはEL式より柔軟で、メソッドの呼び出しなども可能です。 ですので、EL式とは少し違います。 struts2 は、OgnlValueStack というスタックに値を詰め込んで、 そこからOgnl式を使って値を取り出したりします。 s:property タグは value 属性で指定した名前のオブジェクトを、 Valueスタックから見つけ出して画面に表示するタグです。 s:radio タグの name を message にしても一緒の動作かなと思います。 間違った回答しているかもですが、 参考URLなどを見てはいかがでしょうか。 struts2 について色々書かれています。

参考URL:
http://www.iterasi.net/openviewer.aspx?sqrlitid=adxgbrs3eeez70gqlv2rbg

関連する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を使ったJSPについて

    お世話になります。JSFの使い方についてご教授ください。 JSFタグ使って書いたjspが吐いたHTMLのソースを見ると、文字が全て株のようにユニコードのコードポイント(?)になっているのですが、これはこういうものですか? Javascriptで書いた入力値の検証関数にも「社員ID」と値をベタ書きしておいたら、「社員IDを入力してください。」というダイアログになってしまいました。 どなたか JSFタグ使って書いたjspが吐いたHTMLのソースの文字を株のようにしない方法 あるいは 上記のJavascriptのメッセージを「社員IDを入力してください。」ときちんと読めるようにする方法 を、ご教授ください。どうぞよろしくお願いします。

  • 複数のラジオボタン選択肢によりsubmitを押せなくする

    初めて質問させていただきます。 ラジオボタンが下記の選択状態の時だけ「送信(submit)」ボタンを enable で表示させたいです。 1:● 2:○ 1:● 2:○ それ以外の選択肢では「送信(submit)」ボタンを disabl で押せないようにしたいです。 調べて、近い動作にはなりましたが、javascriptに関して 殆ど知識がないため、これから先がさっぱりわかりません。 ぜひ教えを乞いたく参りました。お知恵をお貸しください<(__)> どうぞ宜しくお願い致します。 <HTML> <HEAD> <script type="text/javascript"><!-- function unlock1(el){el.form.send.disabled=false;} function unlock2(el){el.form.send.disabled=true;} //--> </script> <form> 1:<input type="radio" name="radio1" value="1" onClick="unlock1(this)"> 2:<input type="radio" name="radio1" value="2" onClick="unlock2(this)"><br> 1:<input type="radio" name="radio2" value="1" onClick="unlock1(this)"><br> 2:<input type="radio" name="radio2" value="2" onClick="unlock2(this)"><br> <input name="send" type="submit" value="送信" disabled > </form> </BODY> </HTML>

  • JSP + ラジオボタン

    JSP+Servlet+Beanで作ってます。 JBuilder5を使ってます。 JSPはラジオボタン、テキスト、ボタン等があります。 <INPUT TYPE = "radio" NAME = "r1" VALUE = "ins">A <INPUT TYPE = "radio" NAME = "r1" VALUE = "upd">B <INPUT TYPE = "radio" NAME = "r1" VALUE = "del">C としています。 たとえば、Bを選択時、ボタンクリックで Servletにリクエストを送信しますが、 Servletから再びJSPを呼び出し、画面を 表示するとき、ラジオボタンはBを選択 させたいのですが、どうしたらいいですか? FormタグのCHECKEDというオプションを どのように使えばいいのか教えていただきたいのですが。 テキストには、Beanでsetメソッド、 JSPでは、<jsp:getProperty・・・>を使って セットできているんですが、ラジオボタンも 同様ですか? @@@・・・JSPのタグを勉強しないといけないです。 @@@勉強不足です。

    • ベストアンサー
    • Java
  • Strutsのvalidate()でListの値がなくなる

    Strutsを使用して開発をしています。 一覧表示されたデータを選択し、その選択されたデータを更新するという システムを作っています。 [詳細] 一覧にはラジオボタンと名前と年齢が表示されています。 ラジオボタンで選択されたデータの年齢を見て 50才以上なら更新せず、validate()でエラーにしたいのです。 JSPではList(ラジオボタンと名前と年齢が入っている)を <logic:iterate >タグでぐるぐる回しています。 更新ボタン押下時、validate()メソッド内で listを取得して判断しようとしたのですがnullになってしまいます。 このListの値を取得する方法はありませんでしょうか? よろしくお願いいたします。

    • ベストアンサー
    • Java
  • Strutsで、どのRadioボタンが選択されているかの情報を受け渡ししたい。

    Strutsを使っているWEBシステムで、taglibを使用せずに、情報を受け渡ししたいです。 ..やろうとして挫折したこと ..1.setAttributeでの受け渡し ....setAttributeは画面のロード時にしか実行できないようで、無理でした。 ....(正確には、RadioボタンのOnLoadイベントで、JSPからはsetAttributeを実行できない。) ..2.form上のコントロールのValueでの受け渡し ....input.type="radio".name="radio_object".value="値" ....のようにして、次の画面遷移先に渡そうとしましたが、 ....struts-config.xml.で記述している.formクラスに対し、 ....taglib.を使用して、formクラスに値設定する方法でなければ、 ....情報を受け渡しできないようでした。 taglib は、内部的には何らかの方法で、formクラスに値を受け渡ししているはずですし、 その方法を、jsp上で記述する方法もあると思っているのですが、 無理なのでしょうか?

    • ベストアンサー
    • Java
  • ラジオボタンの値を・・・・・

    <html> <head> <script language="javascript"> function osu(){ document.form1.text1.value=document.form1.radio1.value; } </script> </head> <body> <form name="form1"> <input type="radio" name="radio1" value="男" checked>男 <input type="radio" name="radio1" value="女">女 <input type="button" value="押す" onClick="osu()"> <input type="text" name="text1"> </form> </body> </html> ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー 上記のプログラムは、選択されたラジオボタンの値をテキストボックスに表示させるプログラムなんですが、何故かラジオボタンの値が表示されず、「undefined」というのが表示されます。 どうすれば、「男」または「女」という値を表示させることができますか? ちなみにこれは、「○○○.html」で保存します

  • 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 の様なものがあれば、最初のリクエストかどうかを判別できるのですが・・・! 以上です。 上記のようなコンストラクタを使用する以外でも、なにか良い方法は無いでしょうか? お詳しい方、何卒よろしくお願い申し上げます・・・!

  • struts:input type="text"とhtml:textの違いは?

    はじめまして。 strutsのhtmlタグで質問があります。 Formの中にvalidateを実装しました。 画面にエラーメッセージを表示するまではうまくいきましたが、 遷移前に入力した値を保持し再度表示してくれません。 原因を調べてみると、 <input type="text" name="hoge"> ではなく、 <html:text property="hoge"/> ならば値を保持してくれることがわかりました。 ここで質問なのですが、 (1)strutsでは、値の保持のため<html:text~>を使うのが妥当なのか? (2)strutsで<input type="text"~>を使用する場合、どういう実装をすれば値をjspに渡せるのか? (sessionに格納するのはなんとなくわかります。ですが、strutsの場合、ActionとFormだけで動作しますし、通常のsetAttribute("hoge","value");をどこで入れるのが適切なのかわかりませんでした。 初心者な問題で申し訳ありませんが、strutsをより理解したいため、お分かりになる方教えていただけないでしょうか?よろしくお願いします。

  • ラジオボタンの値を関数へわたすには?

    初心者です。 現在以下のような方法で関数へ値をわたしています。 <input type="button" value="検索" onclick="upLoad(this.form.com.value,this.form.time.value,this.form.day2.value)" name="saveposision"> しかし、ラジオボタンの値だけうまくわたりません。 ラジオボタンの値を関数へわたすにはどのようにしたらよいでしょうか? また、この値の渡し方は長々と表記しないといけないですが、なにか他に短く、セキュリティホールにならない方法はあるでしょうか?

専門家に質問してみよう