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>
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>