当前位置: 首页 > 面试题库 >

在p:columngroup中未调用p:commandButton操作和f:setpropertyactionlistener

戚澄邈
2023-03-14
问题内容

我需要将子组件放在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事件可以正常调用,但是按钮的操作和f:setPropertyActionListener都不会调用。如何使它们工作?

如果我将p:columnGroup type =“
footer”的构造更改为p:column标签,则按钮操作和f:setPropertyActionListener都可以正常工作


问题答案:

PrimeFaces有一个错误,即如果CommandButton或commandLink位于标题中,则它不会触发动作监听器(来源
-参见第二个缺陷)。我有一种直觉,您在页脚中遇到了同样的问题。

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



 类似资料:
  • 我在使用JSF2.0时遇到了问题。命令按钮不调用bean,我已经阅读了balusc应答commandbutton/commandlink/ajax action/listener方法未调用或输入值未更新,但我认为我不会遇到这些情况,这就是我使用的代码: 更新1:

  • 我有一个JSF页面,其中有一个具有ajax=true的p:命令按钮,并在单击时呈现一个包装在p: outputGroup中的p:面板。当单击此按钮时,action方法将在ManagedBean中将show CreateUser值设置为true,这用于呈现面板。这工作正常——单击按钮后面板会正确呈现。在p:面板内还有另一个p:命令按钮。这个命令按钮不起作用,因为当我单击它时什么都不会发生。永远不会调

  • 解决方案(更新): 我认为任何操作都会导致react-redux-link调用mapState函数,但是当一个操作没有改变任何事情时,情况就不是这样了。 我有一个localStorage模块,它分派操作,但不更改状态,而是写入localStorage。该模块具有容器中使用的选择器,但在状态实际更改之前不会调用这些选择器,因此只有在调度另一个更改状态的操作后,UI才会正确显示。 问题 当我把商店放在

  • 问题内容: 我正在将数据从javascript应用程序发送到MVC5控制器,但是,当数据提交到Submit controller操作时,它永远不会被调用。我有一些非常简单的映射器,它们创建以下JSON对象: 然后,我使用以下代码发送数据: 我的控制器代码如下: 我有以下问题: 但是,从不会调用Submit,但是,如果我注释掉了控制器参数,那么它将被调用,这是为什么呢? 从上面看来,控制器框架似乎无

  • 我以https://stackoverflow.com/a/3180885/242042中的示例为例,只是根据我的需要对其进行了调整。 这是我的豆子: 和我的JSF文件 所以它是相当相似的,但我不明白的是为什么它不想在“编辑”上调用操作。(即我在SystemOut.log上看不到任何内容) 我正在查看答案https://stackoverflow.com/A/13327382/242042,看看是

  • 任何人都可以指向一个官方Java文档,该文档描述了流将调用每个元素的每个“无干扰和无状态”中间操作的次数。 例如: 以上代码当前将调用< code>check方法4次。 在JDK的当前或未来版本中,方法的执行次数是否可能多于或少于从List或任何其他标准JavaAPI创建的流中的元素数量?