Ajax update/render does not work on a component which has rendered attribute

荒凉一梦 提交于 2019-11-25 21:59:14

问题


I\'m trying to ajax-update a conditionally rendered component.

<h:form>
    ...
    <h:commandButton value=\"Login\" action=\"#{login.submit}\">
        <f:ajax execute=\"@form\" render=\":text\" />
    </h:commandButton>
</h:form>
<h:outputText id=\"text\" value=\"You\'re logged in!\" rendered=\"#{not empty user}\" />

However, that does not work. I can assure that #{user} is actually available. How is this caused and how can I solve it?


回答1:


It's not possible to re-render (update) a component by ajax if the component itself is not rendered in first place. The component must be always rendered before ajax can re-render it. Ajax is using JavaScript document.getElementById() to find the component which needs to be updated. But if JSF hasn't rendered the component in first place, then JavaScript can't find anything to update.

The solution is to simply reference a parent component which is always rendered.

<h:form>
    ...
    <h:commandButton ...>
        <f:ajax ... render=":text" />
    </h:commandButton>
</h:form>
<h:panelGroup id="text">
    <h:outputText ... rendered="#{not empty user}" />
</h:panelGroup>

See also:

  • Why do I need to nest a component with rendered="#{some}" in another component when I want to ajax-update it?
  • How to find out client ID of component for ajax update/render? Cannot find component with expression "foo" referenced from "bar"


来源:https://stackoverflow.com/questions/14790014/ajax-update-render-does-not-work-on-a-component-which-has-rendered-attribute

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!