modaLPanel

http://yfyang.iteye.com/blog/262041

http://blog.youkuaiyun.com/gengv/archive/2009/06/12/4263633.aspx

http://www.vine-server.com/blog/index.php?UID=1234967481

http://www.experts-exchange.com/Programming/Languages/Java/J2EE/Frameworks/JSF/Q_24123308.html

http://codingclues.eu/2008/richfaces-richmodalpanel-with-richcomponentcontrol-does-not-show-data/

Recently I stumbled across a problem with the rich:modalPanel component of the JBoss RichFaces component library, which didn’t want to show the data of a backing been.

Let’s assume the following scenario:
You have a DataTable with several rows. Each row contains a “See details…” button. This button will popup a modal panel using rich:componentControl and the panel is populated with data of a backing bean. This backing bean is filled with actual data by clicking our “See details…” button using a4j:actionparam

Expressed in code, this might look like this:
<rich:column>

<a4j:commandButton value=“See details…” id=“det”>


<rich:componentControl for=“popup”
operation=“show” event=“onclick”
disableDefault=“true”/>

<a4j:actionparam name=“id” assignTo=“#{popupBean.dataId}”
value=“#{rowdata.dataId}”/>


<!– some more actionparams … –>

</a4j:commandButton>

</rich:column>

Well, everything seems fine, doesn’t it? The properties for the bean of the popup are set with a4j:actionparam, the rich:componentControl displays the popup, which then accesses its data.
So let’s test it. Hugh, there is no data in your popup?

There is one thing we missed. The problem is, that the rich:componentControl triggers simple JavaScript code, that is executed before the JSF lifecycle is processed and the bean’s data is set. So your popup is displayed, but at this time, the bean does not have the correct values.

How can we solve this? Well, it’s pretty easy, because we have the reRender attribute on the a4j:commandLink. Simply re-render the fields of your popup, that should hold the actual data. Or embedd them in a a4j:region. This works, because the reRender action is executed after the JSF lifecycle has passed and the values of the bean are now set correctly.

Just one hint at the end: don’t re-render the whole popup, since this way it will be hidden again.

The slightly modified working code:
<rich:column>

<a4j:commandButton value=“See details…” id=“det”
reRender=“popup_dataIdField, …”>


<rich:componentControl for=“popup”
operation=“show” event=“onclick”
disableDefault=“true”/>

<a4j:actionparam name=“id” assignTo=“#{popupBean.dataId}”
value=“#{rowdata.dataId}”/>


<!– some more actionparams … –>

</a4j:commandButton>

</rich:column>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值