メイン

JSF MyFaces Tomahawk アーカイブ

2006年08月02日

JSFのコメント文の書き方

JSFは
<!-- コメント文 -->

ちなみに、CSSは、
/* コメント文 */

javaは、
// コメント文

2006年08月03日

java.lang.IllegalStateException

【ERROR】
ERROR org.apache.catalina.core.ApplicationDispatcher:704 - サーブレット jsp のServlet.service()が例外を投げました
java.lang.IllegalStateException: Client-id : _idJsp46 is duplicated in the faces tree. Component : start:_idJsp46, path: {Component-Path : [Class: javax.faces.component.UIViewRoot,ViewId: /faces/start.jsp][Class: javax.faces.component.html.HtmlForm,Id: start][Class: javax.faces.component.html.HtmlPanelGrid,Id: _idJsp45][Class: javax.faces.component.html.HtmlOutputText,Id: _idJsp46]}


【解決策】
(1)tomcatを停止する
(2)workフォルダーのファイルを削除する
*Eclipseで開発している場合は、F5のリフレッシュを実行してからファイル削除
(3)tomcatを起動する

【原因/要因】
・変更前のキャッシュが残っているので、変更箇所が反映されていない模様

2006年08月04日

tomcatの起動時エラーログ

tomcatを起動すると、こんなエラーメッセージが表示されます。とりあえず作ったプログラム(JSF)の動作は確認できる状態です。

続きを読む "tomcatの起動時エラーログ" »

tomcatの終了時エラーログ

ちなみにtomcatの終了時は、以下のようなエラーが表示されます。

2006/08/04 21:15:18 org.apache.coyote.http11.Http11BaseProtocol pause
情報: Coyote HTTP/1.1を http-8080 で一時停止します
2006/08/04 21:15:19 org.apache.catalina.core.StandardService stop
情報: サービス Catalina を停止します
2006/08/04 21:15:23 org.apache.catalina.core.StandardContext stop
情報: コンテナ org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/prototype] はまだ起動されていません
2006/08/04 21:15:23 org.apache.coyote.http11.Http11BaseProtocol destroy
情報: Coyote HTTP/1.1を http-8080 で停止します
2006/08/04 21:16:07 org.apache.catalina.core.AprLifecycleListener lifecycleEvent
情報: Failed shutdown of Apache Portable Runtime

2006年08月08日

bean not accessible

tomcatが「beanがアクセス可能ではありません」といったエラーを出した場合のチェック項目:
- beanの初期化でエラーが発生したが、そのまま実行が進み、JSPのところでエラーが表示された場合
→エラーログをチェックする。
- beanがpublicでない場合
→beanの宣言を確認する。特に、内部クラスはわかりにくいので注意。下記の例では、LocalClassはpublic宣言されていないので、JSPからはアクセスできない。

public class TestBean {
LocalClass data;
class LocalClass {
}
public LocalClass getData() {
return data;
}
}

2006年08月14日

Java・JSFメモ

- tomcatのエラーがブラウザに表示される
-- faces-config.xmlで、URL中の「&」をエスケープしていなくてエラーになったことがありました。

- url-patternは、ディレクトリかワイルドカードのどちらかとする。

- managed-beanへの初期値設定で、Stringクラスが見つからないと言われる。
-- java.lang.Stringと指定して解決しました。

- JSFのテストケースの作り方
++ ソースフォルダ「/WEB-INF/test」を作る
++ ソースと同じパッケージをtestの下に作る
++ JUnitテストケースを「AaaAaaTest」のようなクラス名で作る(コンストラクタ等を全部ONにする)

- JSFプロジェクトのはじめ方
++ Tomcatプロジェクトを新規作成
++ パッケージを/WEB-INF/src/に作成
++ コマンドラインから、必要なjarファイルを/WEB-INF/lib/にコピー
++ プロジェクトのプロパティの「Java Build Path」で「Add JARs...」を選択し、自プロジェクトのWEB-INF/libの下を全選択して追加
++ WEB-INFの下に、faces-config.xmlとweb.xmlを作成

2006年09月06日

jsf: null values not allowed (AbstractReferenceMap.java:251)

ブラウザでリロードすると発生しなかったりするのでかなり謎。

19:09:35,109 ERROR org.apache.catalina.core.ApplicationDispatcher:704 - サーブレット jsp のServlet.service()が例外を投げました
java.lang.NullPointerException: null values not allowed
	at org.apache.commons.collections.map.AbstractReferenceMap.put(AbstractReferenceMap.java:251)
	at org.apache.myfaces.application.jsp.JspStateManagerImpl$SerializedViewCollection.add(JspStateManagerImpl.java:717)
	at org.apache.myfaces.application.jsp.JspStateManagerImpl.saveSerializedViewInServletSession(JspStateManagerImpl.java:493)
	at org.apache.myfaces.application.jsp.JspStateManagerImpl.saveSerializedView(JspStateManagerImpl.java:332)
	at org.apache.myfaces.taglib.core.ViewTag.doAfterBody(ViewTag.java:122)
	at org.apache.jsp.faces.toppage_jsp._jspx_meth_f_view_0(toppage_jsp.java:219)
	at org.apache.jsp.faces.toppage_jsp._jspService(toppage_jsp.java:162)
	at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:332)
	at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
	at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
	at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:672)
	at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:463)
	at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:398)
	at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:301)
	at org.apache.myfaces.context.servlet.ServletExternalContextImpl.dispatch(ServletExternalContextImpl.java:416)
	at org.apache.myfaces.application.jsp.JspViewHandlerImpl.renderView(JspViewHandlerImpl.java:234)
	at org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:384)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:138)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
	at org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:97)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
	at org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:144)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
	at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
	at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
	at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
	at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
	at java.lang.Thread.run(Unknown Source)
19:09:35,125 ERROR org.apache.catalina.core.StandardWrapperValve:253 - サーブレット Faces Servlet のServlet.service()が例外を投げました
javax.faces.FacesException: null values not allowed
	at org.apache.myfaces.context.servlet.ServletExternalContextImpl.dispatch(ServletExternalContextImpl.java:435)
	at org.apache.myfaces.application.jsp.JspViewHandlerImpl.renderView(JspViewHandlerImpl.java:234)
	at org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:384)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:138)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
	at org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:97)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
	at org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:144)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
	at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
	at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
	at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
	at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
	at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.NullPointerException: null values not allowed
	at org.apache.commons.collections.map.AbstractReferenceMap.put(AbstractReferenceMap.java:251)
	at org.apache.myfaces.application.jsp.JspStateManagerImpl$SerializedViewCollection.add(JspStateManagerImpl.java:717)
	at org.apache.myfaces.application.jsp.JspStateManagerImpl.saveSerializedViewInServletSession(JspStateManagerImpl.java:493)
	at org.apache.myfaces.application.jsp.JspStateManagerImpl.saveSerializedView(JspStateManagerImpl.java:332)
	at org.apache.myfaces.taglib.core.ViewTag.doAfterBody(ViewTag.java:122)
	at org.apache.jsp.faces.toppage_jsp._jspx_meth_f_view_0(toppage_jsp.java:219)
	at org.apache.jsp.faces.toppage_jsp._jspService(toppage_jsp.java:162)
	at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:332)
	at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
	at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
	at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:672)
	at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:463)
	at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:398)
	at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:301)
	at org.apache.myfaces.context.servlet.ServletExternalContextImpl.dispatch(ServletExternalContextImpl.java:416)
	... 23 more

2006年09月08日

新規作成した投稿が保存されない件

JSF で、新規作成ボタンを押したら別ウィンドウが出て、 入力した結果を保存し、 元ウィンドウに戻り、画面を再表示する、という流れ。 (ajax を使ってできそうな気はするが、未対応。)

このときの画面遷移は、 (1) メイン画面で新規作成ボタンを押すと、別画面に入力フォームが表示される。 (2) 入力フォーム画面で入力して、[保存]を押すと、 保存の処理を行って、ウィンドウを閉じる。 (3) メイン画面が再表示される。

(2) のところで、 こういう怖いことをやっている。

<h:commandButton id="button4" styleClass="commandB" value="【保存】"
    action="#{userBean.scenario.form.save}"
    onclick="window.opener.location.href='#{userBean.url}';javascript:window.close()" />

保存ボタンを押すと、 action に指定した save が実行されるが、 onclick で指定された、 元のウィンドウの location を変更して、windows を閉じる、という処理も行われる。 ここの順序が怪しくて、 現象から想像すると、 元ウィンドウの画面を作成する処理で、 Managed bean である userBean のフィールドになっている scenario が再構築されていて、 その中にフォームで入力した情報が保持されている form というオブジェクトがあるのだが、 これを action で処理する前に、 (3) の処理中で初期化してしまって、 入力された情報が消滅したのではないか。

修正案はいくつかあるが、 保存した結果がよくない(保存できなかった)ときに元に戻れる方がいい、 ということもあるので、 action で save を呼び出すときに、 いきなり元ウィンドウの表示を更新せずに、 結果を画面に表示して確認させてから更新するようにした。 つまり、onclink のところは除去して、 この次の画面遷移で行うようにして解決。

onclick の中で location.href を指定してメイン画面を再表示しているのは、 (a) 単に reload だと、「form に情報を再送信するか」というダイアログが出てしまう。 (b) reload しても、追加されたデータが表示されない(状態がキャッシュされている?)。 のような問題があるため。 location.href で解決するというのは邪道だと思うのだが、 本道としてはどうすればいいのだろう?

JSF/ERR java.lang.NullPointerException


http://localhost:18080/prototype/faces/dataBean.jsp

http://localhost:18080/prototype/faces/dataBean.jsf

本来は、jsfの拡張子のモノをjspで指定してしまった場合に起こる。
jspだと、jspのタグしか解釈できず、jsfのタグが入っているとエラーになる模様
それにしても、エラーメッセージがわかりずらい

2006年09月11日

JSFでのエラー調査

JSFで開発中、EL式の値が取得できないというエラーが発生しました。しかし、何が原因で発生したのかがわからなかったので、以下のように対応しました。
-問題のメソッドに以下のコードを入れて、例外の詳細が表示されるようにする
try {
} catch (Exception e) {
e.printStackTrace();
}
-このままだとこのメソッドが何度も呼ばれてログがスクロールアウトしてしまうので、System.exit(1);を追加して、tomcatごと落とす

結局、原因は不正なキャストでした。

2006年10月02日

jmeter2.2で画面異常

jmeter2.2を実行中に、左側のツリーが表示されなくなり、あとで確認したらコンソールにエラーが表示されていました。「テーマの切り替え」をおこなったところ、操作可能な程度には回復しました。
エラーの詳細は、以下の通りです。

続きを読む "jmeter2.2で画面異常" »

2006年10月03日

delegateで文字コード変換

JMeterの評価で社内ページ(EUC)にアクセスしたときに、不正なUTF-8コードがあるという例外が多数出力されました。そこで、delegateを文字コード変換用のプロクシとして使ってみました。なお、delegateはコンテンツをキャッシュしますので、JMeterの本来の目的である負荷試験をおこなうには注意が必要です。

続きを読む "delegateで文字コード変換" »

2007年07月18日

MyFaces: ReducedHTMLParser - Invalid tag found

次のような warning が出ていた。

WARN org.apache.myfaces.renderkit.html.util.ReducedHTMLParser:566 - Invalid tag found: unexpected input while looking for attr name or '/>' at line 444

何のことか分かりにくいが、 jsf (jsp) のファイルの中の HTML 的エラーがあるという警告である。 今回の場合は、 次のような行があった。

<div id="lay_function"">

次のように修正すると warning が出なくなった。

<div id="lay_function">

2007年08月09日

Tomahawk t:tree2 の childCount を非表示にする

ツリー表示のノード名の右に、子ノードの数が表示されるのだが、 この表示を消す方法が分からない。 よく調べると分かるのかもしれないが、 とりあえずそれ用の attribute とか見つからないので、 css で次のように指定してごまかしている。

.childCount
{
color: #FFFFFF;
font-size: 1%;
}

#FFFFFF はツリーを表示している箇所の背景色である。

2007年09月28日

JSF の login page と servlet の timeout

ログインしても無視されて、もう一度ログインしたらログインできる、という現象があるというので考えてみた。

JSF で用意した login page に username と password を入力できるように Managed bean を置いておくと、入力した内容が入ったオブジェクトがプログラムに渡り、おきまりの手順の処理が行われる。

では、この login page を放置しておくとどうなるか。クライアントを放置しておくと、servlet (tomcat) は session timeout に指定された時間待って、その後 session が開放される。このとき、JSF の View も開放され、Managed bean も行き場を失う。しかし、ブラウザ上には、かなり前に表示したままの login page が残っている。ここに username と password を入力して、login ボタンを押すとどうなるか?

当然、action に指定されたメソッドを呼び出すためのオブジェクトは存在しない。そもそも、view が消滅しているから、JSF の Lifecycle としては、Phase 1 の Restore View が実行されたときに、デフォルトの状態をとりあえず用意するだけで、いきなり Phase 6 の Render Response フェーズまでスキップする。その結果、入力した username と password は無視され、再びログイン画面が表示される。

つまり、ログイン画面が session timeout していなければ、ログインの処理は成功する。さて、ここで問題なのだが、ログイン画面が表示された状態で長時間放置して、session timeout が発生したときも、username と password を 1度だけ入力してログインするようにしたい。

開発製品

jirologos.gif

About JSF MyFaces Tomahawk

ブログ「三田ブログ」のカテゴリ「JSF MyFaces Tomahawk」に投稿されたすべてのエントリのアーカイブのページです。新しい順番に並んでいます。

前のカテゴリはJiroSearchです。

次のカテゴリはMovable Typeです。

他にも多くのエントリがあります。メインページアーカイブページも見てください。

Powered by
Movable Type