Я перехожу с RichFaces 3.3.3 на 4.0 и столкнулся с проблемой, которая не может понять, как ее решить.
До сих пор я использовал аннотацию RichFaces @ KeepAlive для достижения области просмотра с помощью bean-компонентов, но в новой версии 4 пока нет такой функции (насколько я знаю). Поэтому я подумал, что аннотация @ViewScoped будет естественной (и быстрой) заменой, но она не работает.
Вот соответствующий код, который доставляет мне неприятности. Он отображает таблицу, содержащую клиентов с их именами в виде ссылок, поэтому при нажатии на имя появляется всплывающее окно для редактирования данных. Он работает в v3.3.3 с @KeepAlive, но не работает в v4 с @ViewScoped (всплывающее окно не вызывается).
Страница:
<h:form prependId="false">
<rich:dataTable id="table" value="#{myBean.customers}" var="customer">
<!--...headers...-->
<h:column>
<a4j:commandLink action="#{myBean.selectCustomer}"
oncomplete="#{rich:component('popup_customer_editor')}.show();" render="form_customer_editor">
${customer.name}
<f:setPropertyActionListener value="#{customer}" target="#{myBean.selectedCustomer}"/>
</a4j:commandLink>
</h:column>
<h:column>${customer.address}</h:column>
</rich:dataTable>
</h:form>
<rich:popupPanel id="popup_customer_editor>
<h:form id="form_customer_editor">
<!--...form fields...-->
</h:form>
</rich:popupPanel>
Боб:
@ManagedBean
@ViewScoped //It was @KeepAlive before
public class MyBean implements Serializable
{
private String name;
private String address;
private Customer selectedCustomer; //POJO class
//getters and setters
...
public String selectCustomer()
{
name = selectedCustomer.getName();
address = selectedCustomer.getAddress();
return null;
}
}
Любая помощь будет оценена