【问题标题】:preRenderView and ajaxpreRenderView 和 ajax
【发布时间】:2012-01-14 17:47:11
【问题描述】:

我有一个 preRenderView 附加到组件 A。还有另一个组件 B 有 ajax。 ajax 将呈现一个隐藏的组件,其中包含一些文本字段。问题是 ajax 没有渲染 inputText 字段

<h:form....>
<ui:composition...>
<f:event type="preRenderView" listener="#{bean.action}">
...........
<ui:composition/>

<ui:composition...>
<h:selectOneRadio....>
<f:ajax render="inputTextId"../>
<h:selectOneRadio/>
<ui:fragment rendered="#{condition}">
<h:inputText id="inputTextId" ...../>
<ui:fragment/>
<ui:composition/>
<h:form/>

【问题讨论】:

    标签: ajax jsf-2


    【解决方案1】:

    在收到 Ajax 响应后,在 JavaScript 的帮助下在客户端进行重新渲染。它要求待更新组件的生成 HTML 输出在客户端已经。但是,在您的情况下,生成的 HTML 输出中永远不会出现它。您需要交换 renderedid 属性。

    <h:selectOneRadio ...>
        <f:ajax render="inputTextWrapperId" />
    </h:selectOneRadio>
    <h:panelGroup id="inputTextWrapperId" >
        <h:inputText id="inputTextId" rendered="#{condition}" />
    </h:panelGroup>
    

    此问题与预渲染视图事件无关。删除它时,您会遇到完全相同的问题。

    另见:

    【讨论】:

    • ajax的post back会触发preRenderView吗?
    • 是否可以只为一个组件而不是整个表单使用 preRenderView?
    • 我不确定这有什么关系。但是,是的,无论请求的类型如何,都会在每次渲染视图之前触发预渲染视图事件。如果你想跳过这个回发,你需要检查FacesContext#isPostback(),或者等待JSF2中的新&lt;f:viewAction&gt;标签,它有一个onPostback属性。
    • BalusC 我不认为在某些情况下会触发 preRenderView,例如您在 ui:include xhtml 中部分(ajax)提交表单。鉴于您依赖 preRenderView 支持 bean 来获取 ui:include 的 src。
    猜你喜欢
    • 1970-01-01
    • 2018-05-05
    • 2013-11-27
    • 1970-01-01
    • 2013-01-19
    • 2013-01-29
    • 2014-08-20
    • 2014-05-13
    • 2012-04-08
    相关资源
    最近更新 更多