2013-07-24 4 views
1

Мне нужно поместить дочерние компоненты в нижний колонтитул подповерхности (p: columngroup type = "нижний колонтитул"), но стандартный визуализатор субсети не предоставляет такую ​​возможность. Так что я перекрытая org.primefaces.component.SubTableRenderer добавить ребенок рендеринга:p: commandButton action и f: setpropertyactionlistener не вызывается в p: columngroup

public class CustomSubTableRenderer extends SubTableRenderer{ 
@Override 
protected void encodeColumnFooter(FacesContext context, SubTable table, Column column) throws IOException { 
    ResponseWriter writer = context.getResponseWriter(); 

    String style = column.getStyle(); 
    String styleClass = column.getStyleClass(); 
    styleClass = styleClass == null ? DataTable.COLUMN_FOOTER_CLASS : DataTable.COLUMN_FOOTER_CLASS + " " + styleClass; 

    writer.startElement("td", null); 
    writer.writeAttribute("class", styleClass, null); 
    if(column.getRowspan() != 1) writer.writeAttribute("rowspan", column.getRowspan(), null); 
    if(column.getColspan() != 1) writer.writeAttribute("colspan", column.getColspan(), null); 
    if(style != null) writer.writeAttribute("style", style, null); 

    //encode children 
    for(UIComponent footerColumnChild : column.getChildren()) { 
     if(footerColumnChild.isRendered()) { 
      footerColumnChild.encodeAll(context); 
     } 
    } 

    UIComponent facet = column.getFacet("footer"); 
    String text = column.getFooterText(); 
    if(facet != null) { 
     facet.encodeAll(context); 
    } else if(text != null) { 
     writer.write(text); 
    } 

    writer.endElement("td"); 
} 

}

Когда я ставлю некоторые дочерние компоненты в р: группа столбцов, как:

<p:dataTable> 
      <p:subTable> 
       <p:column>..</p:column> 
       <p:columnGroup type="footer"> <p:row> <p:column colspan="3"> 
        <p:commandButton id="button" 
            action="#{myBean.someAction}" 
            oncomplete="jQuery('#select').modal('show');return false;" 
            value="#{val.add}" alt="#{val.add}" 
            title="#{val.add}"> </p:commandButton> 
        <f:setPropertyActionListener value="#{otherBean.id}" 
               target="#{anotherBean.selectedBackId}" /></p:column> </p:row> 
       </p:columnGroup> </p:subTable> 
     </p:dataTable> 

Баттона rendered и onClick вызывает штраф, но ни действие кнопки, ни f: setPropertyActionListener не вызывают. Как заставить их работать?

, если я изменю р: columnGroup тип = «Footer» конструкцию, р: столбец тег, чем кнопки действий и е: setPropertyActionListener как работают хорошо

ответ

0

У PrimeFaces есть ошибка, при которой commandButton или commandLink не запускает прослушиватель действий, если он находится в заголовке (source - см. Второй дефект). У меня есть подозрение, что вы столкнулись с той же проблемой в нижнем колонтитуле.

Это было исправлено в недавнем выпуске, но оно еще не доступно для публики. Если вы хотите использовать кнопку PrimeFaces (а не стандартную кнопку HTML), вам придется купить подписку PrimeFaces Elite или скомпилировать источник с нуля.

1

I вещь, которую вы можете поставить setPropertyActionListener внутри CommandButton так:

<p:commandButton ...> 
<f:setPropertyActionListener value="#{otherBean.id}" target="#{anotherBean.selectedBackId}"/> 
</p:commandButton> 
Смежные вопросы