У меня есть пара страниц, на которых я хочу использовать составной компонент, который отображает, добавляет и удаляет список языковых вкладок.
Страница, использующая составной компонент, может выглядеть следующим образом:
...
<ccc:languageTabs languages="#{viewBean1.languages}">
// some input components
// example:
<h:inputText value="#{viewBean1.name[language.id]}"/>
</ccc:langaugeTabs>
...
Составной компонент выглядит примерно так:
...
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:web="http://industry-supply.dk/jsf"
xmlns:cc="http://java.sun.com/jsf/composite">
<cc:interface>
<cc:attribute name="languages"/>
</cc:interface>
<cc:implementation>
<div id="#{cc.clientId}">
...
<web:iterator value="#{cc.attrs.languages}" var="language">
// render some tabs
</web:iterator>
<web:iterator value="#{viewBean2.otherLanguages}" var="language">
<h:commandLink action="#{viewBean2.add(language.id)}">
<f:ajax execute="@this" render=":#{cc.clientId}"/>
// label
</h:commandLink>
</web:iterator>
<web:iterator value="#{cc.attrs.languages}" var="language">
<h:commandLink action="#{viewBean2.remove(language.id)}">
<f:ajax execute="@this" render=":#{cc.clientId}"/>
// label
</h:commandLink>
<cc:insertChildren/>
</web:iterator>
...
</div>
</cc:implementation>
...
Итак, проблема в том, что у меня 2 компонента.У меня есть viewBean1 для моей страницы с компонентами ввода, а viewBean2 для моего составного компонента, потому что я хочу, чтобы все функциональные возможности компонентов были удалены из viewBean1, чтобы его можно было повторно использовать.Но список с языками происходит от viewBean1 и управляется viewBean2. Вопрос в том, как я могу сделать так, чтобы изменения, которые я выполняю в списке в viewBean2, отражали на viewBean1, не связывая вместе 2 компонента?Я не думаю, что это так.Там не будет никаких изменений на самой странице.Только составной компонент, который будет / должен / мог бы выглядеть так:
...
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:web="http://industry-supply.dk/jsf"
xmlns:cc="http://java.sun.com/jsf/composite">
<cc:interface>
<cc:attribute name="languages" boundTo="viewBean2.languages"/>
</cc:interface>
<cc:implementation>
<div id="#{cc.clientId}">
...
<web:iterator value="#{viewBean2.languages}" var="language">
// render some tabs
</web:iterator>
<web:iterator value="#{viewBean2.otherLanguages}" var="language">
<h:commandLink action="#{viewBean2.add(language.id)}">
<f:ajax execute="@this" render=":#{cc.clientId}"/>
// label
</h:commandLink>
</web:iterator>
<web:iterator value="#{viewBean2.languages}" var="language">
<h:commandLink action="#{viewBean2.remove(language.id)}">
<f:ajax execute="@this" render=":#{cc.clientId}"/>
// label
</h:commandLink>
<cc:insertChildren/>
</web:iterator>
...
</div>
</cc:implementation>
...
Кто-нибудь знает, возможно ли что-то подобное?Или, если нет, если возможно расширить cc новым компонентом, который позволил бы такое поведение?