У меня вопрос, как я могу обновить другой составной компонент, который находится на той же странице. Если я ввожу идентификатор клиента и нажимаю кнопку «Поиск», клиент должен искать в базе данных, а если есть, то система продолжит поиск базы данных на идентификаторе клиента. И наоборот.Каждое другое обновление составных компонентов JSF
Для этого примера предположим, что отношения Клиент: случай 1: 1.
main_page.xhtml
<h:body>
<ui:composition template="/WEB-INF/template/layout.xhtml">
<ui:define name="content">
<custom:component_customer
customerId="#{mainPageController.customer.id}"
searchCustomer="#{mainPageController.searchCustomer}"
/>
<custom:component_case
caseaseId="#{mainPageController.case.caseId}"
searchCase="#{mainPageController.searchCase}"
/>
</ui:define>
</ui:composition>
</h:body>
component_customer.xhtml
<composite:interface>
<composite:attribute name="customerId" type="java.lang.Long"/>
<composite:attribute name="searchCustomer" method-signature="void searchCustomer()"/>
</composite:interface>
<composite:implementation>
<h:form>
<h:inputText id="id" value="#{cc.attrs.customerId}"/>
<h:commandButton value="Search" action="#{cc.attrs.searchCustomer}"/>
</h:form>
</composite:implementation>
component_case.xhtml
<composite:interface>
<composite:attribute name="caseId" type="java.lang.Long"/>
<composite:attribute name="searchCase" method-signature="void searchCase()"/>
</composite:interface>
<composite:implementation>
<h:form>
<h:inputText id="id" value="#{cc.attrs.caseId}"/>
<h:commandButton value="Search" action="#{cc.attrs.searchCase}"/>
</h:form>
</composite:implementation>
MainPageController.java
@ManagedBean
@ViewScoped
public class MainPageController {
@EJB
private CaseLogic caseLogic;
@EJB
private CustomerLogic customerLogic;
private Customer customer = new Customer();
private Case case = new Case();
// getter & setters
public void searchCustomer() {
}
public void searchCase() {
}
1) Есть ли какое-то общее решение «JSF» для этого?
2) Или я должен как-то попробовать реализовать шаблон дизайна Observer в java-коде? Но есть проблема, что будет существовать множество объектов (MainPageController, SecondPageController, ...) для многих наблюдателей (Customer, Case, ...).
ОК, я завернул компонентный корпус: ... h: panelGroup>. Но что вы имеете в виду: «Пишите этот идентификатор в поиске и обновляете атрибут» и «используйте это атрибут в командной кнопке»? –
Ziletka
извините за поздний ответ. Я в отпуске. сначала панель нуждается, чтобы быть в форме. next, создайте новый параметр для вашего компонента, который принимает строку, представляющую элементы, которые вы хотите обновить. введите эту строку в атрибут обновления командной кнопки. – mosgjig
Я все еще сражаюсь.Но другой вопрос: имеет ли стандартная атрибут «обновление»? Или мне нужно использовать команду PrimeFaces commandButton? –
Ziletka