Могу ли я хранить содержимое ArrayList в компоненте Spring? - PullRequest
0 голосов
/ 23 сентября 2019

Это мой первый пост, извините, если я что-то делаю плохо.

Мой вопрос прост.У меня есть 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"
    }

}
...