Согласно исходному коду Mojarra 2.3.8, это поощряемое поведение, TableRenderer
(как говорит его название) отвечает и явно делает это :
com.sun.faces.renderkit.html_basic.TableRenderer.encodeChildren(FacesContext, UIComponent)
:
if(!renderedRow) {
// if no row with data has been rendered, render that empty row in question:
this.renderEmptyTableRow(writer, data);
}
Возможны следующие варианты:
1) Добавить визуализированный атрибут в вашу таблицу данных:
<h:dataTable value="#{backingBean.entityList}"
rendered="#{not empty backingBean.entityList}" ...>
...
</h:dataTable>
<h:outputText rendered="#{empty backingBean.entityList}"
value="No data to display, sooo sorry :-("/>
2) Переопределить TableRenderer
для выполненияработа лучше соответствует вашим потребностям:
package my;
import java.io.IOException;
import javax.faces.component.UIComponent;
import javax.faces.component.UIData;
import javax.faces.context.FacesContext;
import com.sun.faces.renderkit.html_basic.TableRenderer;
public class CustomTableRenderer extends TableRenderer {
@Override
public void encodeChildren(final FacesContext context, final UIComponent component) throws IOException {
final UIData data = (UIData) component;
final int rowCount = data.getRowCount();
if (rowCount > 0) {
super.encodeChildren(context, component);
} else {
// do what super.encodeChildren does, but your way ...
}
}
}
К сожалению, вы не можете просто переопределить com.sun.faces.renderkit.html_basic.TableRenderer.renderEmptyTableRow(ResponseWriter, UIComponent)
и заставить его ничего не делать, потому что это private
.
В faces-config.xml
зарегистрируйте свой пользовательскийрендер:
<render-kit>
<renderer>
<component-family>javax.faces.Data</component-family>
<renderer-type>javax.faces.Table</renderer-type>
<renderer-class>my.CustomTableRenderer</renderer-class>
</renderer>
</render-kit>
Редактировать: рассматриваемое поведение было введено в коммите исправление проблемы # 1009 с комментарием :
Fix for issue 1009: Rendered h:dataTable/h:panelGrid without rows/content do not validate against XHTML 1.0 Transitional (and html4)
git-svn-id: https://svn.java.net/svn/mojarra~svn/trunk@7669 761efcf2-d34d-6b61-9145-99dcacc3edf1
Жаль, что я больше не мог найти эту проблему, , но @Kukeltje сделал!