【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集

java & JSF1.2 についての質問です。
私は、JavaとJSFを勉強中のプログラマです。C,C++,C#,php,SQL 等の技術的知識は多少あります。
しかし、Java と JSF については初心者です。

<質問概要>
JSFの勉強のために、簡単な電子掲示板プログラムを開発しているのですが、
クエリー(SQL)の結果を JSF の <h:dataTable> に関連付けて表示する処理がうまく動きません。
クエリーの結果は8レコードのデータを返しているのに、<h:dataTable>には一件も表示されないのです。エラーも出ません。

<開発環境>
OS:WindowsXP SP3
JDK 1.5.0
Apache Tomcat v6.0
JSF 1.2(Apache Myfaces JSF Core-1.2 API 1.2.9)

<問題のソースコード>
[BbsBeanMain.java] Bean のソースコード

public Connection con = null;
public Statement state = null;

private ResultSet rsList;

public ResultSet getRsList() {
this.setRsList();

return this.rsList;
}

public void setRsList() {
try{
Class.forName("com.mysql.jdbc.Driver");
this.con = DriverManager.getConnection("jdbc:mysql://localhost/bbs", "root", "mtdvd1208");
this.state = this.con.createStatement();
String strSQL;
strSQL = "select Thread_ID, Thread_Title, Thread_Date from T1_Thread ";
strSQL += "order by Thread_Date desc ";

this.rsList = this.state.executeQuery(strSQL);
}
catch(Exception ex){
System.out.println("Error BbsBeanMain.setRsList ex=" + ex);
}
}

[main.jsp] JSP のソースコード
<h:dataTable id="ttbl1" value="#{BbsBeanMain.rsList }" var="rs"
headerClass="ttbltr" columnClasses="ttblcol1,ttblcol2" >
<h:column>
<f:facet name="header">
<h:outputText value="スレッド" />
</f:facet>
<h:form id="threadnamefrm">
<h:inputHidden id="threadid" binding="#{BbsBeanMain.ihThreadID }"
value="#{rs.Thread_ID }" />
<h:commandLink action="#{BbsBeanMain.mDispThread }">
<h:outputText id="id1" value="#{rs.Thread_Title }" />
</h:commandLink>
</h:form>
</h:column>
</h:dataTable>

<h:messages />

<ソースコード解説>
 上記 ResultSet オブジェクトの内容を、ArrayList に乗せ変えてやると正常に表示します。
 私が知りたいのは、なぜ ArrayList で動くものが、ResultSet では動かないのか?という点です。
 ヒントだけでも結構です。何か知っている方がいらっしゃれば、教えてください。
 お願いします。
 質問文の最大文字数が少なすぎて、正常に動作する ArrayList 版のソースコードが載せられないのが残念です。

A 回答 (1件)

h:dataTableタグはコレクション(List,配列など)のデータを


表にして表示するUIコンポーネントですからリスト型の物でないと
表示できないかと思います。

参考URL:http://www.wakhok.ac.jp/~tomoharu/jsf2004/text/i …

この回答への補足

残念ながら、自分で答えを見つけてしまいました。

ある意味、この回答は正しいと思われます。

JSFの実装には、いくつか種類があるそうです。
私は一つしかないと思って Myfaces という実装を使用していました。
しかし、現在JSF実装のデファクトスタンダードは、「Mojarra(マハーラ)」という実装だそうです。
 Myfaces は、いくつか不具合もあり速度も遅いなど問題のある実装だそうです。
商用のアプリケーションサーバのJSFもほとんど Mojarra だそうです。

 私の「ResultSet で、<h:dataTable>表示できない」問題も、「もしかしたら Myfacesの不具合かも知れない」と思い、JSF実装を Mojarra に入れ替えてみました。
 すると、案の定 ResultSet で <h:dataTable> 表示ができるようになりました。
 原因は、Myfaces の不具合でした。

 これからJSFを勉強する人は、JSF実装には Mojarra を使用することをお勧めします。
 私のように無駄な苦労をしない為に。

回答者の回答の「リスト型の物でないと表示できない」という回答もMyfaces においては正しいのです。
しかし、Mojarra においては当てはまりません。

 とりあえず、原因がわかったので、この回答をベストアンサーに選んで終了したいと思います。

補足日時:2010/10/20 08:51
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報