JSF Ajax渲染实际上做了什么?

时间:2012-09-13 01:18:24

标签: ajax jsf

在JSF代码中,我看到了:

...

<h:selectOneMenu id="clientCode" value="#{theBean.clientCodeSelection}">
  <f:selectItem itemValue="" itemLabel="Please select one" />
  <f:selectItems value="#{theBean.clientList}" />
  <f:ajax render="go"/>
</h:selectOneMenu>

...

<h:commandButton id="go" value="Go" immediate="true" >
  <f:ajax render="clientTable" event="click" listener="#{theBean.doSearch}"></f:ajax>
</h:commandButton>

我可以知道<f:ajax render="go"/>实际上做了什么吗?我最初的假设是渲染 Go按钮,但我不认为它像我想的那样严格。如果我错了,请纠正我。

2 个答案:

答案 0 :(得分:3)

当ajax请求在webbrowser中成功完成时,<f:ajax render="go">将使用相对客户端ID go更新生成的JSF组件的HTML表示。基本上,具有相对客户端ID go的JSF组件将位于Web服务器中的JSF组件树中,然后执行,之后其生成的HTML输出将最终出现在ajax响应中。一旦ajax响应在webbrowser中返回,这个HTML输出就会在webbrowser的HTML DOM树中更新。如果JSF组件可以基于提交的表单数据基于每个请求生成不同的HTML内容,那么这非常有用。

请注意,这仅在JSF组件始终呈现时才有效(即它本身或其父项没有rendered="false"

在您的特定示例中,生成的HTML表示中基本上没有任何内容可以基于每个请求进行更改。因此<f:ajax render="go">在这个特定情况下似乎完全没用。例如,如果您有第二个下拉列表,其可用项目列表取决于当前下拉列表中的所选项目,那么在<f:ajax render>中引用它是有意义的,以便在您更改时更新新项目目前的下拉列表。

答案 1 :(得分:0)

这里它什么也没做,但是如果你想在某些渲染条件下显示commandButton那么它将被使用...