Как распознать составные компоненты Java Server Faces 2.0 при использовании ajax? - PullRequest
1 голос
/ 20 ноября 2010

У меня есть следующий составной компонент Java Server Faces 2.0. Обратите внимание, я использую дословно

resources/customer/customer.xhtml

<composite:interface>
    <composite:attribute name="id" required="false"/>
    <composite:attribute name="firstName" required="false"/>
    <composite:attribute name="lastName" required="false"/>
    <composite:attribute name="age" required="false"/>
    <composite:attribute name="rendered" required="false"/>
</composite:interface>
<composite:implementation>
    <f:verbatim id="#{cc.attrs.id}" rendered="#{cc.attrs.rendered}">
        <div>
            <div>
                <p>First name</p>
                <h:outputText value="#{cc.attrs.firstName}"/>
            </div>
            <div>
                <p>Last name</p>
                <h:outputText value="#{cc.attrs.lastName}"/>
            </div>
            <div>
                <p>Age</p>
                <h:outputText value="#{cc.attrs.age}"/>
            </div>
        </div>
    </f:verbatim>
</composite:implementation>

Чтобы использовать ajax, я сделал (обратите внимание render attribute)

<h:form id="search">
<div>
    <h:commandButton value="Search" action="#{customerSearchController.search}">
        <f:ajax execute="@form" render="search:result"/>
    </h:commandButton>
</div>
<customer:customer id="result"
                   rendered="#{customerSearchController.customer != null}"
                   firstName="#{customerSearchController.customer.firstName}"
                   lastName="#{customerSearchController.customer.lastName}"
                   age="#{customerSearchController.customer.age}"/>
</h:form>

Мой CustomerSearchController отображается следующим образом

private Customer customer;

// getter's and setter's

public void search() {
    customer = new Customer();

    customer.setFirstName("First");
    customer.setLastName("Last");

    customer.setAge(30);
}

И CustomerSearchController, и Customer являются управляемыми компонентами. Но когда я вызываю запрос ajax, он жалуется: поиск: результат не найден

Что я должен сделать, чтобы решить эту проблему ???

1 Ответ

1 голос
/ 20 ноября 2010

<f:ajax render> должен указывать на существующий идентификатор клиента в дереве HTML DOM.Однако, поскольку элемент search:result недоступен в дереве HTML DOM, поскольку он не отображается на стороне сервера, JS / ajax не может найти что-либо в дереве HTML DOM для обновления / рендеринга.

Оберните его в другой элементкоторое всегда доступно в дереве HTML DOM, чтобы Ajax мог его найти.

<h:panelGroup id="result">
    <customer:customer rendered="..." />
</h:panelGroup>

Не имеет отношения к реальной проблеме, обратите внимание, что f:verbatim должен содержать только дословно (обычный HTML), а не компоненты JSF,Замените его на h:panelGroup.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...