Vai aí o código jsp da tabela:
<t:dataTable var="atributo" value="#{lanctosManuaisBean.dadosManutAtributos.atributos}"
rowIndexVar="i" cellpadding="0" cellspacing="0" styleClass="tablePadrao"
headerClass="tableHeaderCenter" columnClasses="tableColumn" rowClasses="tableRowRadio">
<t:column headeronmouseover="this.className='tableHeaderCenterMouseOver'"
headeronmouseout="this.className='tableHeaderCenter'">
<f:facet name="header">
<t:outputText onmouseover="" value=" " escape="false" />
</f:facet>
<t:radio for=":manutAtribForm:rdgAtribs" index="#{i}" />
</t:column>
<t:column headeronmouseover="this.className='tableHeaderCenterMouseOver'"
headeronmouseout="this.className='tableHeaderCenter'">
<f:facet name="header">
<t:outputText styleClass="HtmlDataTableBold"
value="#{msgs.label_atributo}" escape="false" />
</f:facet>
<t:outputText styleClass="HtmlDataTable"
value="#{atributo.codAtributo}" escape="false" />
</t:column>
<t:column headeronmouseover="this.className='tableHeaderCenterMouseOver'"
headeronmouseout="this.className='tableHeaderCenter'">
<f:facet name="header">
<t:outputText styleClass="HtmlDataTableBold"
value="#{msgs.label_conteudo}" escape="false" />
</f:facet>
<t:outputText styleClass="HtmlDataTable"
converter="emptyAsSpaceConverter" value="#{atributo.conteudoAtributo}" escape="false" />
</t:column>
<t:column headeronmouseover="this.className='tableHeaderCenterMouseOver'"
headeronmouseout="this.className='tableHeaderCenter'">
<f:facet name="header">
<t:outputText styleClass="HtmlDataTableBold"
value="#{msgs.label_situacao_atri}" escape="false" />
</f:facet>
<t:outputText styleClass="HtmlDataTable"
value="#{atributo.codSituacaoAtributo}" escape="false" />
</t:column>
</t:dataTable>
Note que tentei criar um converter e associá-lo ao outputText que exibe os valores da coluna conteúdo.
Aqui vai o fonte do converter (Bem inocente):
public class EmptyAsSpaceConverter implements Converter {
public EmptyAsSpaceConverter() {
}
public Object getAsObject(FacesContext fc, UIComponent comp, String value) throws ConverterException {
try {
if (value.matches("\\s+")) {
return value.trim();
}
return value;
} catch (Exception e) {
throw new ConverterException(e);
}
}
public String getAsString(FacesContext fc, UIComponent comp, Object value) throws ConverterException {
try {
String result = value.toString();
if (result.length() > 0) {
return result;
}
return " ";
} catch (Exception e) {
throw new ConverterException(e);
}
}
}
[quote=rponte]
Isso me parece mais problema de CSS do que do componente
Você já examinou o código HTML gerado?[/quote]
Examinei. O span aparece lá, porém as bordas definidas na classe tableColumn são simplesmente ignoradas.
Aqui vai o HTML resultante, seguido das classes de estilo:
<t:dataTable var="atributo" value="#{lanctosManuaisBean.dadosManutAtributos.atributos}"
rowIndexVar="i" cellpadding="0" cellspacing="0" styleClass="tablePadrao"
headerClass="tableHeaderCenter" columnClasses="tableColumn" rowClasses="tableRowRadio">
<t:column headeronmouseover="this.className='tableHeaderCenterMouseOver'"
headeronmouseout="this.className='tableHeaderCenter'">
<f:facet name="header">
<t:outputText onmouseover="" value=" " escape="false" />
</f:facet>
<t:radio for=":manutAtribForm:rdgAtribs" index="#{i}" />
</t:column>
<t:column headeronmouseover="this.className='tableHeaderCenterMouseOver'"
headeronmouseout="this.className='tableHeaderCenter'">
<f:facet name="header">
<t:outputText styleClass="HtmlDataTableBold"
value="#{msgs.label_atributo}" escape="false" />
</f:facet>
<t:outputText styleClass="HtmlDataTable"
value="#{atributo.codAtributo}" escape="false" />
</t:column>
<t:column headeronmouseover="this.className='tableHeaderCenterMouseOver'"
headeronmouseout="this.className='tableHeaderCenter'">
<f:facet name="header">
<t:outputText styleClass="HtmlDataTableBold"
value="#{msgs.label_conteudo}" escape="false" />
</f:facet>
<t:outputText styleClass="HtmlDataTable"
converter="emptyAsSpaceConverter" value="#{atributo.conteudoAtributo}" escape="false" />
</t:column>
<t:column headeronmouseover="this.className='tableHeaderCenterMouseOver'"
headeronmouseout="this.className='tableHeaderCenter'">
<f:facet name="header">
<t:outputText styleClass="HtmlDataTableBold"
value="#{msgs.label_situacao_atri}" escape="false" />
</f:facet>
<t:outputText styleClass="HtmlDataTable"
value="#{atributo.codSituacaoAtributo}" escape="false" />
</t:column>
</t:dataTable>
.HtmlDataTable{font-family: verdana; font-size: 10px}
.tableRowRadio {
background-color:#FFFFFF;
padding-bottom: 6px;
padding-top: 6px;
padding-right: 6px;
padding-left: 6px;
border-right: solid #C6C6CB 1px;
border-bottom: solid #C6C6CB 1px;
}
.tableColumn {
border-right: solid #C6C6CB 1px;
border-bottom: solid #C6C6CB 1px;
}
…
…
…
Enquanto estava respondendo aqui, parei e fiz um teste, e acabei por constatar que isso é comportamento do próprio html! Ele não renderiza a TD se seu conteudo for vazio. Associado a isso, temos que se escrevermos espaços dentro do span ou div, ele é “trimado”(argh!), ficando vazio e, consequentemente, não renderizando a TD.
A solução que achei foi mexer no converter para que, ao invés de mandar um " ", mandar um " ", que é a entidade html do espaço. Quando passo isso, ele não “trima”(urgh!) o conteúdo da SPAN e renderiza a célula!!!.
Muito obrigado a todos pelas idéias!