在JSTL中迭代不同大小的多个项目

时间:2014-03-08 18:03:40

标签: javascript jquery spring jsp jstl

我的JSP页面正在接收两个列表:一个是可用的所有自动化列表,另一个是一个特定用户可用的自动化。我想创建一个复选框列表,列出所有自动化,但只检查用户的自动化。有人可以指出我这样做的一个方向吗?

更新1

这是显示所有自动化的html / jstl代码:

<div class="row" id="autorizacoes ${item.id}">
            <c:forEach var="item_auth" items="${autorizacoes}">
                <input type="checkbox" name="${item_auth.nome}" onclick="mudaAutorizacao(${item_auth.nome})">${item_auth.nome}
            </c:forEach>
        </div>

此方法调用包含此代码的页面(放在我的控制器中):

@RequestMapping("/listagem_usuario")
    public ModelAndView listagem_usuario()
    {
        UsuarioDAO lista = new UsuarioDAO();
        DadosDAO dados = new DadosDAO();
        TipoDAO tipo = new TipoDAO();
        AutorizacaoDAO auth = new AutorizacaoDAO();

        ModelAndView mav = new ModelAndView();
        mav.setViewName("listagem_usuario");
        mav.addObject("usuarios", lista.lista());
        mav.addObject("campos", dados.getListaCampos());
        mav.addObject("tipos", tipo.getListaTipos());
        mav.addObject("autorizacoes", auth.getListaAutorizacoes());

        return mav;
    }

这是来自AutorizationDAO的方法,它读取数据库中的自动化:

public List<Autorizacao_usuario> getListaAutorizacoes()
    {
        List<Autorizacao_usuario> lista = new ArrayList<Autorizacao_usuario>();

        conecta();

        if(executa("SELECT id, nome, descricao FROM autorizacoes;")) {
            do{
                Autorizacao_usuario auth = new Autorizacao_usuario(getInt(1), getString(2), getString(3));
                lista.add(auth);
            }while(proximo());
        }

        return lista;
    }

每个用户的自动化都可以从List<Autorizacao_usuario> getAutorizacoes()(com.HorarioLivre.core.Usuario类)获得:

最后,这是将autorization数据保存在内存中的POJO类:

package com.HorarioLivre.core;

public class Autorizacao_usuario {
    private int Id;

    private String nome;

    private String descricao;

    public Autorizacao_usuario()
    {
        this.setId(0);
        this.setNome(null);
        this.setDescricao(null);
    }

    public Autorizacao_usuario(int id, String nome, String descricao)
    {
        this.setId(id);
        this.setNome(nome);
        this.setDescricao(descricao);
    }

    public int getId() {
        return Id;
    }

    public void setId(int id) {
        Id = id;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getDescricao() {
        return descricao;
    }

    public String setDescricao(String descricao) {
        this.descricao = descricao;
        return descricao;
    }
}

1 个答案:

答案 0 :(得分:2)

尝试这样的事情:

<div class="row" id="autorizacoes ${item.id}">
        <c:forEach var="item_auth" items="${autorizacoes}">
            <c:set var="isChecked" value="${false}"/>
            <c:forEach var="user_auth" items="${userAutorizacoes}">
                <c:if test="${user_auth.id == item_auth.id}">  <!-- here compare according ID or any unique attribute -->
                    <c:set var="isChecked" value="${true}"/>
                </c:if>
            </c:forEach>
            <input type="checkbox" name="${item_auth.nome}" onclick="mudaAutorizacao(${item_auth.nome})"  <c:if test="${isChecked}">checked="checked"</c:if> />${item_auth.nome}
        </c:forEach>
    </div>

它检查每个item_auth是否等于用户的自动化,如果是,则在复选框元素中设置checked属性。