f: ajax работает только с @form или @all - PullRequest
1 голос
/ 15 ноября 2011

У меня есть составной компонент, который содержит форму с AJAX.я не могу понять, почему он работает только для параметра @ form / @ all render.

    <cc:interface>
    <cc:attribute name="radioItem"/>
    <cc:attribute name="radioItems" />
    <cc:attribute name="compImage" />
    <cc:attribute name="compSpecification"/>

    </cc:interface>

<!-- IMPLEMENTATION -->
<cc:implementation>
    <h:form> 
        <div id="options">
            <h:selectOneRadio value="#{cc.attrs.radioItem}" >
                <f:selectItems value="#{cc.attrs.radioItems}" />
                <f:ajax render=":details" />
    </h:selectOneRadio>
        </div>

        <div id="details">
            <h:graphicImage value="#{cc.attrs.compImage}"/>
            <h:outputText value="#{cc.attrs.compSpecification}"/>
        </div>      
   </h:form> 
</cc:implementation>

Чего мне не хватает?

1 Ответ

3 голосов
/ 15 ноября 2011

Эта проблема имеет две стороны:

  1. Вы указываете абсолютный идентификатор клиента :details, в то время как элемент для повторного рендеринга находится внутри того же UINamingContainer parent, поэтому JSF не сможет найти его в дереве компонентов.Вам необходимо указать относительный идентификатор клиента details.

  2. Вы указали идентификатор в простом элементе HTML вместо простого JSF-компонента, поэтому JSF не сможетнайдите его в дереве компонентов.Вам нужно использовать настоящий компонент JSF.Вам нужно заменить <div> на <h:panelGroup layout="block">.

Итак, исправьте это оба:

<h:form> 
    <div id="options">
        <h:selectOneRadio value="#{cc.attrs.radioItem}" >
            <f:selectItems value="#{cc.attrs.radioItems}" />
            <f:ajax render="details" />
        </h:selectOneRadio>
    </div>

    <h:panelGroup id="details" layout="block">
        <h:graphicImage value="#{cc.attrs.compImage}"/>
        <h:outputText value="#{cc.attrs.compSpecification}"/>
    </h:panelGroup>      
</h:form> 

То, что он работает с @form и @allпросто потому, что JSF может найти элемент, подлежащий повторной визуализации, относительно компонента, для которого было вызвано действие ajax, а именно родительский компонент UIForm и UIViewRoot соответственно.

...