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

Jsf 2 f:ajax方法在jsf页面加载时被调用,jsf-2,Jsf 2,我有一个简单的3行jsf页面和一个支持bean。我正在使用页面中的命令按钮。Onclick事件我称之为ajax。其中ajax方法将输出文本组件添加到子对象。现在的问题是。输出文本组件是在加载页面时呈现的,而不是在单击页面时呈现的 <html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core"

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

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

点击按钮firebug显示状态200 OK。。但是我在页面上看不到任何更改,
execute
属性应该指的是输入组件的客户机ID的空间分隔集合,需要在ajax提交期间进行处理。当视图被渲染并且绑定到它的任何方法被立即调用时,将计算该属性

您应该使用
listener
属性

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

render
属性也是如此

另见:

在f:ajax中,应该使用侦听器而不是执行!检查此链接以查看ajax示例:。我不知道Transcent属性在做什么。您也可以删除您的操作。按照您提到的,我无法在Ajax调用中添加新的Html标记。FireBug显示成功响应。但它有更新标记而不是插入xml标记,这是另一个问题。您正在将新组件添加为viewroot的子组件,但只更新表单。您需要将其添加为表单的子级,或者更新整个viewroot。顺便说一句,这种方法很臭。查看渲染的属性或使用faces消息。是的,谢谢BalusC,在a4j周围漫游之后,primefaces。发现使用简单的jQueryPost方法和servlet更容易,因为在jsf中添加html元素。。。。。。。。。。。。。。
<f:ajax listener="#{bb.method1()}" render="@form" transient="true" event="click" />