Hi,

I'm using MyFaces from SVN head, and JSP to generate HTML.

I need to be able to set the width for various columns on the table, and adding styles to each cell isn't sufficient - I need the COL tag functionality.

As far as I can see, none of the table components available can generate COL html elements. Is this correct?


I'm working on a patch to add this functionality. It involves modifications to HtmlTableRenderer, called just after <TABLE> has been emitted. My current code iterates over all child UIColumn components of the HtmlDataTable:

* if child has a facet named "colstyle":
   * emit a <COL span="n"> to match any preceding UIColumn that
     didn't have this facet
   * get the first child of that component and render it.

This then allows:

  <t:dataTable>
    <t:column>...</t:column>
    <t:column>...</t:column>
    <t:column>
      <f:facet name="header">
         ...
      </f:facet>
      <f:facet name="colstyle">
        <t:colstyle style="color:green" width="0*"/>
      </f:facet>
      <h:outputText value="test"/>
    </t:column>
  </t:dataTable>

to generate

  <TABLE>
    <COL span="2">
    <COL style="color:green" width="0*">
    <THEAD>
      <TR><TH>...</TH></TR>
    <TBODY>
      ....
  </TABLE>

There is something slightly odd about this use of facets though. In other cases, facets are used to hold arbitrary components that are rendered. Here, I'm really assuming the facet holds a component that generates a COL tag; anything else will result in a malformed page.

Can anyone suggest an alternative way for columns to specify their COL data? Storing these attributes directly on the t:column tag isn't really practical I think.

NB: I'll also handle UIColumns (ie t:columns) children but didn't want to confuse things further here...

Cheers,

Simon

Reply via email to