在jsf中使用ajax渲染组件

时间:2011-12-13 10:13:09

标签: jsf-2

问题是,当我将f:ajax的render属性设置为@form时,btnCreateCSV正确呈现。但是,如果我将其更改为按钮的ID,则不会发生任何事情。我想知道,我怎么能解决这个问题。 这是我的xhtml代码:

<h:panelGrid layout="block">
            <h:commandButton value="View SQL" action="#{sparqlQueryBean.convert}" id="btnViewSql">
                <f:ajax execute="txtQuery btnCreateCSV" render="btnCreateCSV txtSqlQuery" onevent="waiting" listener="#{sparqlQueryBean.generateCommands}"></f:ajax>
            </h:commandButton>
            <h:commandButton value = "CSV" action = "#{sparqlQueryBean.createCSV}" id = "btnCreateCSV" rendered="#{sparqlQueryBean.showCSV == true}">
                <f:ajax execute="@none" render = "@none" onevent="waiting"></f:ajax>
            </h:commandButton>

这是我的豆类。在generateCommands方法中,showCSV的值设置为true。但它不起作用。

    public void generateCommands (AjaxBehaviorEvent event) {
    this.setShowCSV(true);
}

1 个答案:

答案 0 :(得分:8)

使用<f:ajax>,JavaScript用于定位HTML DOM树中的元素并重新呈现它们。但是如果JSF组件没有呈现到HTML输出中,那么HTML DOM树中也没有任何内容可以重新呈现。您应该重新渲染其最接近的父组件,而该组件始终呈现,或者将其包装在另一个组件中(例如<h:panelGroup>),该组件始终呈现并重新呈现它。

另见: