f:在加载jsf页面时调用ajax方法

时间:2012-06-24 09:03:44

标签: jsf-2

我有简单的3行jsf页面和一个支持bean。我在页面中使用命令按钮。 Onclick事件我正在调用ajax。其中ajax方法将输出文本组件添加到child。现在的问题是。输出文本组件在页面加载时呈现,而不是单击页面。

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core">
    <h:head>
        <title>Facelet Title</title>
    </h:head>
    <h:body>
        <h:form>
            <h:commandButton id="button1" action="return false" value="Submit">
                <f:ajax execute="#{bb.method1()}" render="@form" transient="true" event="click" />
            </h:commandButton>
        </h:form>
    </h:body>
</html>

支持bean代码

@Named("bb")
@SessionScoped
public class BackingBean implements Serializable {

public BackingBean() {
}

public void method1()
{
    HtmlOutputText out=new HtmlOutputText();
    out.setValue("Text1");
    FacesContext context=FacesContext.getCurrentInstance();
    context.getViewRoot().getChildren().add(out);
    context.getViewRoot().setTransient(true);
}   
}

点击按钮firebug show status 200 OK ..但我在页面上看不到任何变化

1 个答案:

答案 0 :(得分:1)

execute属性应引用空间分隔的输入组件的客户端ID集合,需要在ajax提交期间进行处理。在呈现视图时会评估此属性,并且会立即调用绑定到它的任何方法。

您应该使用listener属性。

<f:ajax listener="#{bb.method1()}" render="@form" transient="true" event="click" />

render属性也是如此。

另见: