Partial rendering redundant method call

半腔热情 提交于 2020-01-04 01:48:52

问题


I am aware that JSF may call a managed bean method a couple of times even if it is called only once in .xhtml. I understand that is due to encode* methods.

I would like to ask you to explain the following case to me. I have a JSF file that sort of looks like this:

<h:form id="form1">
    <h:panelGroup id="output">
        ...
        <h:commandLink...>
            <f:ajax render=":form1:output"/>
        </h:commandLink>
    </h:panelGroup>
</h:form>

All clear so far; pressing the command link rerenders a part of the page within the form panelGroup. The code follows:

<ui:repeat value="#{movieBean.categories}" var="category">
    <li>
        <h:outputLink value="index.xhtml">
            <f:param name="categoryId" value="#{category.categoryId}"/>
            <h:outputText value="#{category.description}"/>
        </h:outputLink>
    </li>
</ui:repeat>

#{movieBean.categories} //this is just a 'test line'

movieBean is request scoped.

Now, when I enter the page for the first time I get two calls to movieBean.categories. That is clear because it is called twice in the code. However, when I hit the AJAX link rendering only a part of the page (output) I get movieBean.categories from <ui:repeat> called again even though it is outside the partially rendered page area. The 'test line' is not called this time.

I performed another test. I deleted the <ui:repeat> tag leaving the 'test line' only. AJAX partial rendering dosen't call it as before.

What makes the movieBean.categories call inside a <ui:repeat> tag different than the one in 'test line'? And why is the call inside <ui:repeat> made when pressing the AJAX link even though it is outside partially rendered <h:panelGroup id="output"/> tag?


回答1:


I'm pretty sure that "redundant" call is made within a phase where JSF rebuilds element tree to store POST data into appropriate elements.

So you basically have two getter calls per request if you stay on the page. First one to store new form values, then to render page content.



来源:https://stackoverflow.com/questions/8535931/partial-rendering-redundant-method-call

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