ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

Java質問&情報提供サイトコミュのJavascriptからJSFにパラメータを渡す方法

  • mixiチェック
  • このエントリーをはてなブックマークに追加
初めて書き込みます.宜しくお願いします.
最近は暑いですね.うちはクーラーがないので,朝起きると干からびているほど暑いです.

JSFを最近始めたのですが,Strutsを使用していた頃に比べると違うことだらけで軽いカルチャーショックを受けています.
以下,質問させてください.

?JSP上にdataTableで記述したテーブルがあり,その行をクリックしたら,javascriptのwindow.open関数で詳細画面を開く.
?window.openの引数,詳細画面のURLにdataTable選択行のインデックスをパラメータで持たせ,詳細画面では,そのインデックスを使ってELで値を設定します.

詳細画面でパラメータの値を取得しようとしたのですが,どうやらパラメータが設定されていないようです.f:parameter要素を使用せずに,直接パラメータを渡す事はできないのでしょうか? 
(直接URLに書き込んだパラメータは,JSFコンテナ?サーブレット?で無視されてしまうのでしょうか? )

f:parameterを使えばいいのですが,dataTableのrowOnClickイベント時に詳細画面を開きたいので,f:parameterを使用できません.
dataTableは列(h:column)単位に記述するようになっていて,行単位の処理に四苦八苦しています.

また,別件になりますが,javascriptからJSFのActionを呼び出す方法をご存知の方がいらっしゃいましたらご教示いただきたく.お願い致します.

ちなみにJSFを使い慣れている方は,あまりjavascriptを使用しないのでしょうか?
イベント処理メインと聞いていたのですが,イマイチその感触が掴めていないように思えます.valueChageとActionEventしかなく,それだけではあまりに足りないような気がするのですが・・・.

【環境】
Tomcat5.x
j2sdk1.4.12
myfaces1.2?(すいません忘れました.)
ie6.0
eclipse3.1

コメント(2)

ソースを乗せてもらうと助かりますが
>(直接URLに書き込んだパラメータは,JSFコ
>ンテナ?サーブレット?で無視されてしまうのでしょう
JSFコンテナでは無視されるかも知れませんがサーブレットJSPで無視されることはないと思います。
巨人男さん,こんにちは.アドバイスありがとうございます.

今,手許にソースがないので,思い出しながら書いてみましたが,大体こんな感じです.
dataTableはMyFacesのtomahawkのものを使用しています.
パラメータにインデックスを入れて,詳細画面表示時に,BackingBeanのGetterで,パラメータから取得したインデックスでListから要素を取得し,それを返すという・・・.
分かりづらいかもしれませんが,宜しくお願い致します.

【呼び出し元JSP】宣言など割愛 t:はtomahawkのprefix
<HEAD>
<SCRIPT>
var id
function openWindow(tr) {
var id = tr.rowIndex;
var url = "http://servername/appRoot/faces/xxxx.jsp?index=" + id;
window.open(url);
}
</SCRIPT>
</HEAD>
<BODY>
<f:view>
<f:form>
<t:dataTable rowOnClick="openWindow(this);" value="#{CustomerListBean.customerList}" var="customer">
<h:column>
<f:facet name="header">
<h:outputText value="顧客名"/>
</f:facet>
<h:outputText value="#{customer.name}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="連絡先"/>
</f:facet>
<h:outputText value="#{customer.address}" />
</h:column>
</t:dataTable>
</f:form>
</f:view>
</BODY>
</HTML>


【BackingBean】
public class CustomerListBean implements Serializable{
private List CustomerList; // サンプルデータ
private Customer selectedCustomer;
//コンストラクタでサンプルデータクラスCustomerを複数持つArrayList作成
public List getCustomerList() {
return helloWorld;
}
public void setCustomerList(List customerList) {
this.customerList = customerList;
}
public Customer getCustomer() {
FacesContext context = ・・・
ExternalContext ex = context.getExternalContext();
Map paramMap = ex.getRequestParameterMap() ;
return customerList.get(((Integer)paramMap.get("index")).intValue);
}
}

【サンプルデータクラス】
public class Customer {
private String name;
private String address;
それぞれのアクセッサは割愛
}

【設定ファイル】web.xmlは割愛
faces-config.xml
<faces-config>
<managed-bean>
<managed-bean-name>CustomerListBean</managed-bean-name>
<managed-bean-class>CustomerListBean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
</faces-config>

【呼び出し先JSP http://servername/appRoot/faces/xxxx.jsp】
<BODY>
<f:view>
<f:form>
顧客名 <h:outputText value="#{CustomerListBean.customer.name}"/>
</f:form>
</f:view>
</BODY>

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

Java質問&情報提供サイト 更新情報

Java質問&情報提供サイトのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング