Компонентный компонент JSF 2 не обновляет значение с помощью f: ajax - PullRequest
1 голос
/ 03 апреля 2011

Я пытаюсь реализовать Composite Component в JSF 2, который будет поддерживать событие ajax "change". CC это:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.prime.com.tr/ui"
xmlns:composite="http://java.sun.com/jsf/composite">
<!-- INTERFACE -->
<composite:interface name="inputText">
    <composite:attribute name="label" />
    <composite:attribute name="value" />
    <composite:attribute name="disabled" default="false" />
    <composite:attribute name="required" default="false" />
    <composite:attribute name="rendered" default="true" />
    <composite:clientBehavior name="change" event="change" 
        targets="#{cc.clientId}:input" />
</composite:interface>

<!-- IMPLEMENTATION -->
<composite:implementation>
    <h:panelGroup id="#{cc.clientId}" rendered="#{cc.attrs.rendered}">
        <h:outputLabel value="#{cc.attrs.label}" for="input" />
        <h:inputText id="input" label="#{cc.attrs.label}" 
            value="#{cc.attrs.value}" disabled="#{cc.attrs.disabled}" 
            required="#{cc.attrs.required}" />
        <h:message for="input" />
    </h:panelGroup>
</composite:implementation>
</html>


Сейчас я пытаюсь использовать его в следующей форме:

<h:form id="form">
    <input:inputText value="#{bean.value}" label="d1" id="d1">
        <f:ajax event="change" update="@this,d2,d3" />
    </input:inputText>
    <h:inputText value="#{bean.value}" id="d2">
         <f:ajax event="change" update="@this,d1,d3" />
    </h:inputText>
    <h:outputText id="d3" value="#{bean.value}" />
</h:form>

Насколько я понимаю, если я изменяю d1 , d2 и d3 должны отображать значение d1, а если я меняю d2 , то и d1, и d3 должны соответственно изменяться как хорошо.
Проблема в том, что когда я изменяю значение в d2 , оно отражается только в d3, тогда как d1 остается пустым, а когда я меняю d2 , d1 и d2 остаются пустыми.

Я использую Mojarra 2.0.2 (я не смог сделать 2.0.3 на Google App Engine, который является моей AS). Я что-то упускаю из-за того, что композитные компоненты должны быть построены? Или это ошибка в Мохарре 2.0.2?

1 Ответ

1 голос
/ 03 апреля 2011

Это:

<h:panelGroup id="#{cc.clientId}"

неверно.#{cc.clientId} - это идентификатор вашего компонента, который является родителем этой группы панелей.Установка одинакового идентификатора для них неверна.Присвойте ему идентификатор типа «myComponentPanel», и он будет иметь абсолютный идентификатор (при размещении в дереве компонентов) «#{cc.clientId}:myComponentPanel».

Я подозреваю, что если вы исправите это, ваше поведение ajaxработа.

...