- PR -

JSFタグ 条件分岐

投稿者投稿内容
いなふみ
常連さん
会議室デビュー日: 2005/09/14
投稿数: 20
投稿日時: 2006-02-03 11:18
JSFを使って開発を行っています。

<h:dataTable>タグを使用してテーブル情報を表示しています。
列情報には<h:selectOneMenu>の入力項目があり、
値によって入力可、入力不可に設定したいと考えています。
renderedを<h:selectOneMenu>に追加して<h:column>の中に入力可と入力不可の
<h:selectOneMenu>を2つ用意したのですが、うまくいきませんでした。
Strutsの<logic:equal>タグのようなものはJSFには存在しないのでしょうか??

--------------------------------------------------------------------------
<h:dataTable id="tbl"
rendered="#{testbean.rendered}"
value="#{testbean.list}"
var="lst"
border="1"
headerClass="title_field">
<h:column>
<f:facet name="header">
<h:outputText value="区分"/>
</f:facet>
<h:selectOneMenu id="kbn" value="#{lst.kbn}" rendered="#{lst.kbnOn}" disabled="true">
<f:selectItem itemValue="0" itemLabel="OFF"/>
<f:selectItem itemValue="1" itemLabel="ON"/>
</h:selectOneMenu>
<h:selectOneMenu id="kbn" value="#{lst.kbn}" rendered="#{lst.kbnOff}" disabled="true">
<f:selectItem itemValue="0" itemLabel="OFF"/>
<f:selectItem itemValue="1" itemLabel="ON"/>
</h:selectOneMenu>
</h:column>
</h:dataTable>

--------------------------------------------------------------------------
どなたかご教授お願い致します。
よしだひろゆき
大ベテラン
会議室デビュー日: 2004/11/22
投稿数: 141
投稿日時: 2006-02-06 15:32
引用:

値によって入力可、入力不可に設定したいと考えています。
renderedを<h:selectOneMenu>に追加して<h:column>の中に入力可と入力不可の
<h:selectOneMenu>を2つ用意したのですが、うまくいきませんでした。


うまくいかないとはどういう状況でしょうか?
renderedプロパティは表示する/しないの切り替えなので,
入力可/不可の切り替えはdisabledプロパティの方ではないでしょうか??

それと,これは好みの問題かもしれませんが,ビーン側にOn/Offというメソッドを設ける
のは,プレゼンロジックとビジネスロジックの混在になってしまう気がします.
何か状態(status)があって,それが何かの時にOn/Offになるのではないでしょうか?
つまり #{bean.status == 'some state'} や #{bean.status != 'some state'}の
ような感じかと.
いなふみ
常連さん
会議室デビュー日: 2005/09/14
投稿数: 20
投稿日時: 2006-02-07 13:51
引用:

うまくいかないとはどういう状況でしょうか?
renderedプロパティは表示する/しないの切り替えなので,
入力可/不可の切り替えはdisabledプロパティの方ではないでしょうか??


申し訳ありません。JSPの記入を間違えていました。

<h:selectOneMenu id="kbn" value="#{lst.kbn}" rendered="#{lst.kbnOn}" disabled="true">
<f:selectItem itemValue="0" itemLabel="OFF"/>
<f:selectItem itemValue="1" itemLabel="ON"/>
</h:selectOneMenu>
<h:selectOneMenu id="kbn" value="#{lst.kbn}" rendered="#{lst.kbnOff}" >
<f:selectItem itemValue="0" itemLabel="OFF"/>
<f:selectItem itemValue="1" itemLabel="ON"/>
</h:selectOneMenu>

上に記入しているrendered="#{lst.kbnOn}" は表示されますが、入力不可の
rendered="#{lst.kbnOff}" はプルダウンリストが表示されませんでした。
バッキングビーンをデバックしてみたらkbnOnのgetterにはアクセスしましたがkbnOffのgetterにはアクセスしていませんでした。
引用:

それと,これは好みの問題かもしれませんが,ビーン側にOn/Offというメソッドを設けるのは,プレゼンロジックとビジネスロジックの混在になってしまう気がします.
何か状態(status)があって,それが何かの時にOn/Offになるのではないでしょうか?


すみません。renderedに式が記入出来ることを知らなかったので。。。
ちなみにrendered="#{lst.kbn == '0'}",rendered="#{lst.kbn == '1'}"に変更してみたましたが、結果は同じで先に記入したタグ(disabled="true")のみ表示され入力可のタグは表示出来ませんでした。
よしだひろゆき
大ベテラン
会議室デビュー日: 2004/11/22
投稿数: 141
投稿日時: 2006-02-07 16:24
引用:

上に記入しているrendered="#{lst.kbnOn}" は表示されますが、入力不可の
rendered="#{lst.kbnOff}" はプルダウンリストが表示されませんでした。


ですから,renderedはそういう機能なんですが.
表示するけど入力を不可にするにはrenderedではなくてdisabledの方です.
disabled="#{lst.kbn == '0'}"のように.
いなふみ
常連さん
会議室デビュー日: 2005/09/14
投稿数: 20
投稿日時: 2006-02-09 10:53
引用:

ですから,renderedはそういう機能なんですが.
表示するけど入力を不可にするにはrenderedではなくてdisabledの方です.
disabled="#{lst.kbn == '0'}"のように.


ありがとうございます。disabled="#{lst.kbn == '0'}"で解決できました。
が、再度質問させて下さい。
renderedが表示する/しないの切り替えを行うことは分かるのですが、
下記のようにlist.kbn == '0'のときは入力不可のプルダウンを表示し
list.kbn == '1'のときは入力可のプルダウンを表示するという書き方は
出来ないのでしょうか?
rendered="#{lst.kbn == '0'}" disabled="true"
rendered="#{lst.kbn == '1'}" disabled="false"

理解不足で本当に申し訳ありませんが
宜しくお願い致します。
よしだひろゆき
大ベテラン
会議室デビュー日: 2004/11/22
投稿数: 141
投稿日時: 2006-02-09 11:27
すみませんでした.ようやく私もいなふみさんの意図が分かりました.
ONの時はOFFにできるが,OFFの時はONにできない,という仕様ですね.
引用:

renderedが表示する/しないの切り替えを行うことは分かるのですが、
下記のようにlist.kbn == '0'のときは入力不可のプルダウンを表示し
list.kbn == '1'のときは入力可のプルダウンを表示するという書き方は
出来ないのでしょうか?
rendered="#{lst.kbn == '0'}" disabled="true"
rendered="#{lst.kbn == '1'}" disabled="false"

可能なはずです.
もしかして,listビーンをrequestスコープにしていますか?
renderedやdisabledに使うビーンはsessionスコープが原則です.
いなふみ
常連さん
会議室デビュー日: 2005/09/14
投稿数: 20
投稿日時: 2006-02-13 09:18
引用:

ONの時はOFFにできるが,OFFの時はONにできない,という仕様ですね.
もしかして,listビーンをrequestスコープにしていますか?


わらりずらい説明で申し訳ありません。
スコープはsessionにしています。
再度、確認してみたのですが、
rendered="#{lst.kbn == '0'}" disabled="true"
rendered="#{lst.kbn == '1'}" disabled="false"
上記のように記入した場合にはdisabled="true"のタグのみ表示され、
rendered="#{lst.kbn == '1'}" disabled="false"
rendered="#{lst.kbn == '0'}" disabled="true"
の場合はdisabled="false"のタグのみ表示されます。
先に記入したタグのみ有効とされ、後に記入したタグは無視されているようです。
disabledではOKでrenderedではNGというのが謎なのですが・・・
henachoco
常連さん
会議室デビュー日: 2005/11/21
投稿数: 29
お住まい・勤務地: 新ハンドル:t_yamo
投稿日時: 2006-02-14 13:10
ひとまず、現在対象となっているコードに
コード:
<h:outputText value="lst.kbnの値は[#{lst.kbn}]です。" />
<h:outputText value="foo" rendered="#{lst.kbn == '0'}" />
<h:outputText value="bar" rendered="#{lst.kbn == '1'}" />


と書いてlst.kbnの変更で表示が切り替わるかどうかを確認し、それをselectOneMenuに変えたり、disableを付けたりというのを順番に試してみるのはどうでしょう。

スキルアップ/キャリアアップ(JOB@IT)