[
https://issues.apache.org/jira/browse/TOBAGO-733?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12660302#action_12660302
]
Volker Weber commented on TOBAGO-733:
-------------------------------------
Hi Michael,
first, and not the Problem here: i would suggest to never use tc:cell
containing a single component if you don't need the span attributes.
The above example without the tc:cells in the second row renders the same
layout with better performance and less html.
You are right the gridlayout behaves different on single row/column than on a
real (multi row/column) grid.
But the way it works on a real grid is the way i would expect for a gridlayout.
If i place a component in a cell eg. b3 i expect found it rendered there even
if cell b2 has rendered=false. I don't want to add a empty cell with alternate
rendered to b3.
in the above example you can just enclose the image and the in into a cell
with own layout to get the desired behavior:
<tc:panel>
<f:facet name="layout">
<tc:gridLayout rows="fixed;*" columns="fixed;20px;1*"/>
</f:facet>
<%-- First row --%>
<tc:cell spanX="3">
<tc:menuBar id="menuBar">
<%-- some menu entries go here --%>
</tc:menuBar>
</tc:cell>
<%-- Second row --%>
<tc:label value="label"/>
<tc:cell spanX="2">
<f:facet name="layout">
<tc:gridLayout rows="fixed;*" columns="20px;1*"/>
</f:facet>
<tc:image value="image/errorMarker.gif" rendered="#{bean.error}"/>
<tc:in value="#{bean.value}"/>
</tc:cell>
<%-- Third row --%>
<tc:cell spanX="3">
</tc:cell>
</tc:panel>
@Udo: How did the new tobago-1.1 layout handle this case?
> Support for more dynamic layouts by evaluation of the rendered attribute in
> UICell an UIGridLayout
> --------------------------------------------------------------------------------------------------
>
> Key: TOBAGO-733
> URL: https://issues.apache.org/jira/browse/TOBAGO-733
> Project: MyFaces Tobago
> Issue Type: Improvement
> Components: Core
> Affects Versions: 1.0.20, 1.0.21, 1.1.0
> Environment: Windows XP Professional
> Apache Tomcat 6.0.18
> Java6 Update 10
> MyFaces 1.2.5
> Tomahawk 12-1.1.8
> Tobago 1.0.20
> Reporter: Michael Bauer
> Priority: Minor
> Attachments: tobago-core-1.0.20.jar, UICell.java, UIGridLayout.java
>
> Original Estimate: 2h
> Remaining Estimate: 2h
>
> Some child components of the grid layout might change their rendered state
> during user interaction, for example if the user decides to not display a
> menu component or an information box etc. In that case the layout should
> dynamically devide the given space using appropriate row-/colspans. To
> achieve this, two changes would be necessary:
> 1. Using UICell in a grid layout with dynamic spans:
> Let a managed bean support the dynamic layout by calculating the actual cell
> spans. Add value bindings to UICell's spanX- and spanY-attributes like this
> for example:
> public Integer getSpanX() {
> ValueBinding spanBinding = getValueBinding( ATTR_SPAN_X );
> if(spanBinding != null)
> {
> Object obj = spanBinding.getValue( getFacesContext() );
> if(obj != null && obj instanceof Integer)
> {
> Integer integer = (Integer) obj;
> return integer;
> }
> }
> return spanX;
> }
> 2. Calculating layout in UIGridLayout depending on the rendered state of the
> child components (UICells in this case)
> If the child would be a cell and the cell would have a (changing!) value
> binding for the rendered attribute, the cell and it's contents would not be
> rendered - which is OK; However, the place taken by the not rendered cell
> will not be filled by the other components, hence leaving an empty space in
> the layout...
> Checking if a child is rendered before evaluating the grid layout fixes this.
> The necessary changes would have to be made in method "private List<Row>
> createRows() {" for example like this:
> boolean childRendered = component.isRendered();
> if(childRendered)
> {
> rows.get(r).addControl(component, spanX);
> rows.get(r).fill(c + 1, c + spanX, component.isRendered());
> }
> With that, a child component with the attribute rendered set to false will be
> ignored in the layout.
> The second change would need for a dynamic span-evaluation of the other
> components in the same row as suggested in the first change.
> Regards,
> Michael
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.