Это мой первый пост, извините, если я что-то делаю плохо.
Мой вопрос прост.У меня есть Java-класс Bean, в котором у меня есть атрибут List, в который я добавляю значения, в зависимости от того, на какие столбцы таблицы я нажимаю.Метод добавления значений - это тег a4j: support для использования Ajax в JSF, и я написал его в том же классе бинов.Когда я нажимаю на столбец в первый раз, он правильно сохраняет данные в списке.Но если я щелкну еще раз в другом столбце, этот список снова инициализируется как пустой вместо добавления новых значений в список с предыдущими значениями.
Мой вопрос: сбрасывались ли атрибуты bean-компонентов при запуске методабольше 1 раз или что я делаю не так?
Извините за мой плохой английский, надеюсь, вы понимаете это D:
Привет.
РЕДАКТИРОВАТЬ: Как вы спросилидля, я оставлю здесь код.
EDIT2: Решено, нужно только изменить @Scope («запрос») на @Scope («сессия»), так как «запрос» инициализирует компонент при каждом запросе и сеансеинициализировать компонент только в первом запросе сеанса.Спасибо всем, ребята!
<ui:composition template="/templates/main.xhtml">
<ui:define name="title">TITLE</ui:define>
<ui:define name="body">
<table id="tablaFicheros" width="100%">
<thead>
<th class="ficheros" >
<h:outputText value="Categoría" />
</th>
<th class="ficheros" >
<h:outputText value="Subcategoría" />
</th>
<th class="ficheros" >
<h:outputText value="Nombre" />
</th>
</thead>
<tbody id="cuerpoTabla">
<c:forEach items="#{informesFicherosBean.listCategorias}" var="categoria" varStatus="status">
<tr id="filaCategoria#{categoria.idCategoria}">
<td class="ficheros">
<h:form>
<a4j:support event="onclick" reRender="listaSubCategorias" actionListener="#{ informesFicherosBean.abrirSubCategorias}">
<f:attribute name="idCategoria" value="#{categoria.idCategoria}" />
</a4j:support>
<h:outputText value="${categoria.txtNombre}"/>
</h:form>
</td>
</tr>
</c:forEach>
</tbody>
</table>
<rich:dataList value="#{informesFicherosBean.subcategoriasAbiertas}" id="listaSubCategorias" var="item" >
<h:outputText value="#{item.txtNombre}" id="fichero#{item.id}" />
</rich:dataList>
</div>
</ui:define>
</ui:composition>
</html>
Класс Java:
@Service("informesFicherosBean")
@Scope("request")
public class InformesFicherosBean {
/**
* Log
*/
protected static final Log LOG = LogFactory.getLog(InformesFicherosBean.class);
private List<InfInformesFicheros> listFicheros = new ArrayList<InfInformesFicheros>();
private List<InfCategoria> listCategorias = new ArrayList<InfCategoria>();
private List<InfCategoria> subcategoriasAbiertas;
/**
* Servicio
*/
@Autowired
private IInfInformesFicherosModelSvc infInformesFicherosModelSvc;
/**
* Servicio
*/
@Autowired
private IInfCategoriaModelSvc infCategoriaModelSvc;
@PostConstruct
void init() {
}
public List<InfInformesFicheros> getListFicheros() {
if(listFicheros.isEmpty())
return infInformesFicherosModelSvc.loadAll(); //Return all elements from this db table
return listFicheros;
}
public void setListFicheros(List<InfInformesFicheros> listFicheros) {
this.listFicheros = listFicheros;
}
public List<InfCategoria> getListCategorias() { //return all objects from categories db table
if(listCategorias.isEmpty()){
List<InfCategoria> categoriasActuales = infCategoriaModelSvc.listCategorias();
setListCategorias(categoriasActuales);
}
return listCategorias;
}
public void setListCategorias(List<InfCategoria> listCategorias) {
this.listCategorias = listCategorias;
}
public List<InfCategoria> getSubcategoriasAbiertas(){
if (this.subcategoriasAbiertas==null){
setSubcategoriasAbiertas(new ArrayList<InfCategoria>());
}
return this.subcategoriasAbiertas;
}
public void setSubcategoriasAbiertas(List<InfCategoria> subcategoriasAbiertas){
this.subcategoriasAbiertas = subcategoriasAbiertas;
}
public void abrirSubCategorias(ActionEvent event){
//debugging here it always return getSubcategoriasAbiertas as an empty list
Long idCategoriaParam = (Long) event.getComponent().getAttributes().get("idCategoria");
Integer idCategoria = idCategoriaParam.intValue();
infCategoriaModelSvc.abrirSubCategorias(getSubcategoriasAbiertas(), getListCategorias().get(idCategoria - 1)); //add elements to attribute List "subcategoriasAbiertas"
}
}