[
https://issues.jboss.org/browse/RF-12195?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12693294#comment-12693294
]
Paul Dijou commented on RF-12195:
---------------------------------
I'm +1 for using a "scope" attribute since sometime, you will want the cast
only on one or two precise methods. I would "@this" instead of "@current" to me
more JSF like.
How would you support the cast in 2 of the 3 scopes (encodeBegin,
encodeChildren, encodeEnd) ? Whitespace separator ? Like :
{code:xml}
<cdk:object scope="@begin @end"/>
{code}
> Improve cdk:object scope
> ------------------------
>
> Key: RF-12195
> URL: https://issues.jboss.org/browse/RF-12195
> Project: RichFaces
> Issue Type: Enhancement
> Security Level: Public(Everyone can see)
> Components: cdk
> Affects Versions: 4.2.1.Final
> Environment: All
> Reporter: Paul Dijou
> Labels: cdk, richfaces
>
> When using "cdk:object" tag, the cast will only occur for a part of the
> generated Java code, not for all of it. Here is an example :
> {code:xml}
> <cc:implementation>
> <cdk:object type="..." name="objectName" />
> // HTML code using "objectName"
> <cdk:body />
> // HTML code using "objectName"
> </cc:implementation>
> {code}
> This will *not* work because the first part of the HTML code will be in
> "encodeBegin" method and the second part will be in "encodeEnd" method. But
> the cast will only happens in the "encodeBegin" method. And so there will be
> an error in "encodeEnd". The workaround is to copy/paste {{<cdk:object/>}}
> after the {{<cdk:body />}}. Ugly!
> One solution would be that {{<cdk:object/>}} would generate Java code in
> every method that could use the variable even if they don't (methods like
> "encodeBegin", "encodeEnd", ...).
> Another one would be that {{<cdk:object/>}} generates the following method :
> {code:xml}
> <cdk:object type="org.richfaces.bootstrap.component.AbstractBlockquote"
> name="blockquote" value="#{castComponent(component)}"/>
> {code}
> {code:java}
> public AbstractBlockquote getCdkObjectBlockquote(FacesContext facesContext,
> UIComponent component) {
> // From "value" attribute :
> AbstractBlockquote blockquote = this.castComponent(component);
> return blockquote;
> }
> {code}
> And then replace all "blockquote" calls in HTML code with
> {{getCdkObjectBlockquote(facesContext, component);}}. Not sure if this last
> part is possible if the generation is only a copy/paste from the EL.
> An alternative would be to use it like a singleton.
> {code:java}
> public class BlockquoteRenderer extends BlockquoteRendererBase {
> private AbstractBlockquote blockquote;
> private AbstractBlockquote getBlockquote(FacesContext facesContext,
> UIComponent component) {
> if(blockquote == null) {
> blockquote = getCdkObjectBlockquote(facesContext, component);
> }
> return blockquote;
> }
> }
> {code}
> Or any other idea that allow to call {{<cdk:object/>}} only once in the
> template.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://issues.jboss.org/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira
_______________________________________________
richfaces-issues mailing list
[email protected]
https://lists.jboss.org/mailman/listinfo/richfaces-issues