2016年1月21日木曜日

PrimeFacesのrenderedをOFFにしたタグを、AJAX(update)で更新しても描画されない!!

【概要】
PrimeFacesのrenderedをOFFにしたタグを、AJAX(update)で更新しても描画されない!!

【詳細】
概要の通り。renderedに要素が空かどうかで表示非表示を切り替えようとしたが、updateで更新しても表示されない。
調べてみると、どうやらrenderedがfalesの場合、そもそもブラウザ上に表示されない。つまり、「タグも生成されない」
なので、いくらajaxで更新しても何もおこらないと・・・

update要素で存在しないIDを指定するとエラーになるがそれはあくまでfaceletのチェックのようなのでスルーされる模様。

ダメなコード
<p:fileUpload fileUploadListener="#{controller.handleFileUpload}" mode="advanced" dragDropSupport="true"
                  update="messages,buttonEffect,labelFileName" sizeLimit="100000" allowTypes="/(\.)(csv)$/"/>
    <p:panelGrid columns="2">
        <p:outputLabel value="#{disp.Name}"/>
        <p:outputLabel id="labelFileName" value="#{controller.file.fileName}" rendered="#{!empty controller.file}"/>
    </p:panelGrid>

正解サンプル
<p:panel visible="#{!empty controller.file}">
<p:outputLabel id="labelFileName" value="#{controller.file.fileName}" />
</p:panel>

PrimeFacesのpanelタグにはvisible属性があるようなので↑のようなコードであれば表示非表示を簡単に切り替えられる。
あとは、styleにdisplayかvisibleをしていするか。(true:falseで指定できないのでめんどくさいかな)

【残課題】
なし

0 件のコメント:

コメントを投稿