gpt4 book ai didi

java - p :commandButton action and f:setpropertyactionlistener not invoked in p:columngroup

转载 作者:行者123 更新时间:2023-11-30 09:19:42 24 4
gpt4 key购买 nike

我需要将子组件放入 primefaces 子表页脚 (p:columngroup type="footer"),但标准子表渲染器不提供这样的机会。所以我覆盖了 org.primefaces.component.SubTableRenderer 以添加子渲染:

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:column 组时,例如:

<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>

按钮被呈现并且 onClick 事件调用正常,但是按钮的 Action 和 f:setPropertyActionListener 都没有调用。如何让它们发挥作用?

如果我将 p:columnGroup type="footer"构造更改为 p:column 标签而不是按钮操作和 f:setPropertyActionListener 都可以正常工作

最佳答案

PrimeFaces 有一个错误,其中如果 commandButton 或 commandLink 位于 header 中,则不会触发 Action 监听器(source - 参见第二个缺陷)。我有预感你在页脚中遇到了同样的问题。

此问题已在最近的版本中修复,但尚未向公众开放。如果您想使用 PrimeFaces 按钮(而不是标准的 HTML 按钮),则必须购买 PrimeFaces Elite 订阅或从头开始编译源代码。

关于java - p :commandButton action and f:setpropertyactionlistener not invoked in p:columngroup,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17838434/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com