You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by "Thiago H. de Paula Figueiredo (JIRA)" <ji...@apache.org> on 2016/03/16 21:31:33 UTC
[jira] [Comment Edited] (TAP5-1918) RenderInformals mixin doesn't
always work as expected
[ https://issues.apache.org/jira/browse/TAP5-1918?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15198093#comment-15198093 ]
Thiago H. de Paula Figueiredo edited comment on TAP5-1918 at 3/16/16 8:31 PM:
------------------------------------------------------------------------------
I believe that, if the target component implements {{ClientElement}}, we should take advantage of knowing what the client id (HTML id) is and using it with `{{markupWriter.getDocument().getElementById(clientElement.getClientId())}}`. When it's not, then the only guaranteed way of implementing this I can think of is using a {{MarkupWriterListener}} and applying the mixin logic to the first element generated by the component and throw an exception if none is generated.
was (Author: thiagohp):
I believe that, if the target component implements {code}ClientElement{code}, we should take advantage of knowing what the client id (HTML id) is and using it with {code}markupWriter.getDocument().getElementById(clientElement.getClientId()). When it's not, then the only guaranteed way of implementing this I can think of is using a MarkupWriterListener and apllying the mixin logic to the first element generated by the component and throw an exception if none is generated.
> RenderInformals mixin doesn't always work as expected
> -----------------------------------------------------
>
> Key: TAP5-1918
> URL: https://issues.apache.org/jira/browse/TAP5-1918
> Project: Tapestry 5
> Issue Type: Bug
> Components: tapestry-core
> Affects Versions: 5.3.1, 5.3.2, 5.3.3, 5.4
> Reporter: Lance
> Priority: Minor
>
> The following code:
> {code}
> <div>
> <t:beaneditform t:id="entity" ... t:mixins="RenderInformals" data-foo="bar" />
> </div>
> {code}
> Results in the following HTML:
> {code}
> <div class="form-horizontal" data-foo="bar">
> <form ...>
> </form
> </div>
> {code}
> As you can see, the informal parameter was added to the div instead of the form.
> The current implementation of RenderInformals assumes that a component has populated the MarkupWriter with an element in beginRender() which is not always the case. I think it should be changed to use an afterRender() method and add informals to the current element's last child.
> eg:
> {code}
> @MixinAfter
> @SupportsInformalParameters
> public class RenderInformals
> {
> @Inject
> private ComponentResources resources;
>
> void afterRender(MarkupWriter writer)
> {
> List<Node> children = writer.getElement().getChildren();
> if (!children.isEmpty()) {
> Element lastChild = (Element) children.get(children.size() - 1);
> for (String name : resources.getInformalParameterNames()) {
> lastChild.attribute(name, resources.getInformalParameter(name, String.class));
> }
> }
> }
> }
> {code}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)