JSP, сервлеты и JSTL

У меня есть вопрос об использовании JSTL.

В моем проекте я использую jstl, основываясь на примере, который я нашел в облаке. Но я был удивлен, что это не работает для меня должным образом, поэтому я прошу вашей поддержки.

Проблема в том, что список, который я посылаю из моего сервлета через request.setAttribute на мой jsp, не записывается моим jstl, или я действительно не знаю, что это может быть.

Здесь я оставляю то, что я реализовал, чтобы вы поняли, о чем я говорю.

Пост моего сервлета

 private static String Factores = "/frmFactores.jsp";
 protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    try {
        String forward="";
        String action = request.getParameter("action");
        List<Factor> factores = RiesgosNeg.Instancia().ListarFactores();
        if (action.equalsIgnoreCase("delete")){
            int userId = Integer.parseInt(request.getParameter("userId"));
            // dao.deleteUser(userId);
            forward = Factores;
            request.setAttribute("factores",factores);
        } else if (action.equalsIgnoreCase("edit")){
            //forward = INSERT_OR_EDIT;
            //int userId = Integer.parseInt(request.getParameter("userId"));
            //User user = dao.getUserById(userId);
            request.setAttribute("factores", factores);
        } else if (action.equalsIgnoreCase("listFactor")){
            forward = Factores;
            request.setAttribute("factores",factores);
        } else {
            request.setAttribute("factores",factores);
        }

        RequestDispatcher view = request.getRequestDispatcher(forward);
        view.forward(request, response);
    } catch (Exception ex) {
        ex.getMessage();
    }
}

JSP

<c:if test="${!empty factores}">
    <c:forEach items="${factores}" var="f">
        <tr>                                          
            <td class="text-center"><c:out value="${f.Descripcion}"/></td>
            <td class="text-center">
                <c:choose>
                    <c:when test="${f.estado == 1}" >
                        <!-- <input type="checkbox" checked="checked" disabled="disabled"> -->
                        <i class="fa fa-check-square-o"></i>
                    </c:when>
                    <c:otherwise>
                        <!-- <input type="checkbox" disabled="disabled"> -->
                        <i class="fa fa-square-o"></i>
                    </c:otherwise>
                </c:choose>
            </td>
            <td class="text-center" data-id="<c:out value="${f.codigo}"/>">
                <a href="javascript:;" class="btn btn-primary btn-circle edit" title="Editar"><i class="fa fa-edit"></i></a>
                <a href="javascript:;" class="btn btn-danger btn-circle remove" title="Eliminar"><i class="fa fa-remove"></i></a>
            </td>
        </tr>
    </c:forEach>
</c:if>

Мой JS, где я вызываю сервлет для вызова моего сервлета с момента выбора моей страницы

$(window).load(function () {
    // Si en vez de por post lo queremos hacer por get, cambiamos el $.post por $.get
    $.post('../sRiesgos', {
        action: 'listFactor'
    }, function (responseText) {
        // $('#tblFactores').html(responseText);
    }); });
1
задан 29.08.2016, 18:58
2 ответа

Хороший, прочитав Ваши комментарии, которые они agradesco очень много =). И исследуя немного рядом с моей дорогой чашкой cafГ©. я нашел способ делать мой jsp с ajax, неудачно не смог user jstl = (.

Мой jsp:

<table class="table table-striped table-bordered table-hover" id="tblFactores">
                        <button type="button" class="btn btn-primary" name="btnAdd" id="btnAdd"> Agregar</button>                            
                        <thead>
                            <tr>                                    
                                <th>Factor</th>                                    
                                <th>Estado</th>
                                <th>Acciones</th>
                            </tr>
                        </thead>

                      <tbody>

                        <%
                            List<Factor> listafactores = FactorNEG.Instancia().Listar();

                            for (int i = 0; i < listafactores.size(); i++) 
                            {
                                int tipo = listafactores.get(i).getCodigo();
                                out.println("<tr>");
                                out.println("<td class='text-center'>" + listafactores.get(i).getDescripcion() + "</td>");
                                if (listafactores.get(i).getEstado()== 1) {
                                    out.println("<td class='text-center'><i class='fa fa-check-square-o'></i></td>");
                                } else {
                                    out.println("<td class='text-center'><i class='fa fa-square-o'></i></td>");
                                }
                               %> 
                         <td class="text-center" data-id="<%=listafactores.get(i).getCodigo()%>" >


                        <a href="javascript:;" class="btn btn-primary btn-circle edit" title="Editar"><i class="fa fa-edit"></i></a>
                        <a href="javascript:;" class="btn btn-danger btn-circle remove " title="Eliminar"><i class="fa fa-remove"></i></a>

                        </td>
                        </tr>
                        <%
                                 }
                                 %>
                          </tbody>  

                    </table>

Мой servlet:

protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    try {
           String action = request.getParameter("action"); 
           Factor f = new Factor();
        if (action.equalsIgnoreCase("registrar")) {
           // Factor f = new Factor();
            f.setCodigo(Integer.parseInt(request.getParameter("codigo")));
            f.setDescripcion(request.getParameter("descripcion"));
            f.setEstado(Integer.parseInt(request.getParameter("estado")));
            int valor = FactorNEG.Instancia().Registrar(f);

            response.setContentType("application/json");
            response.setHeader("Cache-Control", "no-cache");
            Map<String, String> data = new HashMap<String, String>();
            data.put("codigo",String.valueOf(valor));
            Gson gson = new GsonBuilder().setPrettyPrinting().create();
            String json = gson.toJson(data);
            response.getWriter().write(json);
        }
        if(action.equalsIgnoreCase("delete"))
        {
            f.setCodigo(Integer.parseInt(request.getParameter("codigo")));

            Boolean respuesta =  FactorNEG.Instancia().delete(f.getCodigo());
            response.setContentType("application/json");
            response.setHeader("Cache-Control", "no-cache");
            Map<String, String> data = new HashMap<String, String>();
            data.put("codigo",String.valueOf(respuesta));
            Gson gson = new GsonBuilder().setPrettyPrinting().create();
            String json = gson.toJson(data);
            response.getWriter().write(json);
        }

    } catch (Exception ex) {
        Logger.getLogger(sFactor.class.getName()).log(Level.SEVERE, null, ex);
    }
}

мой jsFactor

var oTable;
$(function () {
oTable = fn_iniciarDT(oTable, "tblFactores");
$("#btnAdd").on("click", function () {
    fn_Add();
});
oTable.on("click", ".edit", function () {
    fn_Edit(this);
});

oTable.on("click", ".save", function () {
    fn_save(this);
});

oTable.on("click", ".remove", function () {
    var elem = this;
    bootbox.confirm("\u00BFEst\u00e1 seguro de eliminar esta factor?\u003F",    function (result) {
        if (result) {
            oTable.fnDestroy();
            fn_Delete(elem);
        }
    });

});
oTable.on("click", ".cancel", function () {
    fn_Cancel(this);
});
});
function fn_Add() {
$("#tblFactores tbody").prepend("<tr>" +
        "<td><input type='text' class='form-upload input-sm' style='width: 100%'/></td>" +
        "<td class='text-center'><input type='checkbox' checked='checked'/></td>" +
        "<td class='text-center'>" +
        "<a class='btn btn-info btn-circle save' href='javascript:;' title='Guardar' ><i  class='fa fa-save'></i></a>" +
        "<a class='btn btn-danger btn-circle cancel' href='javascript:;' title='Cancelar' ><i class='fa fa-ban'></i></a>" +
        "</td></tr>");
};
var fn_save = function (elem) {
var par = $(elem).parent().parent();
var tdnombre_factor = par.children("td:nth-child(1)");
var tdestado = par.children("td:nth-child(2)");
var tdbuttons = par.children("td:nth-child(3)");
var id_codigo = tdbuttons.attr('data-id') === undefined ? 0 :tdbuttons.attr('data-id');

var data = {'codigo': id_codigo, 'descripcion': tdnombre_factor.children("input[type=text]").val(),
    'estado': tdestado.children("input[type=checkbox]").is(":checked") ? 1 : 0
};
var success = function (res) {
    if (res.codigo > 0)
    {
        tdnombre_factor.html(tdnombre_factor.children("input[type=text]").val());
        tdestado.html(res.estado === 1 ? '<i class="fa fa-check-square-o"></i>' : '<i class="fa fa-square-o"></i>');
        tdbuttons.html('<a class="btn btn-primary btn-circle edit"><i class="fa fa-edit"></i></a><a class="btn btn-danger btn-circle remove"><i class="fa fa-remove"></i></a>');
        tdbuttons.attr("data-id", res.codigo);
    }
 };
var error = function () {

    alert("error");
};
console.log(data);
fn_callmethod(base_url + "../sFactor?action=registrar", data, success, error);
};

var fn_Delete = function (elem) {

var codigo = $(elem).parent().attr('data-id') === undefined ? 0 : $(elem).parent().attr('data-id');
if (codigo !== 0) {
    var success = function (res) {
        if (res) {
            var par = $(elem).parent().parent();
            par.remove();
            oTable = fn_iniciarDT(oTable, "tblFactores");
        }
    };
    var error = function () {
    };
    fn_callmethod(base_url + "../sFactor?action=delete", {codigo: codigo}, success, error);
}
};

function fn_Edit(elem) {

var par = $(elem).parent().parent();
var tdnombre_factor = par.children("td:nth-child(1)");
var tdestado = par.children("td:nth-child(2)");
var tdbuttons = par.children("td:nth-child(3)");
var estado;

tdnombre_factor.html("<input type='text' id='txtdescripcion' class='form-control input-sm' style='width: 100%' value='" + tdnombre_factor.html() + "'/>");
estado = tdestado.children("i").hasClass("fa-square-o") ? "<input type='checkbox'/>" : "<input type='checkbox'  checked='checked'/>";
tdestado.html(estado);
tdbuttons.html('<a class="btn btn-primary btn-circle save"><i class="fa fa-save " title="Guardar"></i></a><a class="btn btn-danger btn-circle cancel" title="Cancelar"><i class="fa fa-ban"></i></a>');
}
;
var fn_Cancel = function (elem) {


var par = $(elem).parent().parent();
var tdbuttons = par.children("td:nth-child(3)");
var id = tdbuttons.attr('data-id') === undefined ? 0 : tdbuttons.attr('data-id');

if (id === 0) {
    par.remove();
} else {
    var par = $(elem).parent().parent();
    var tdnombre_factor = par.children("td:nth-child(1)");
    var tdestado = par.children("td:nth-child(2)");

    tdnombre_factor.html(tdnombre_factor.children("input[type=text]").val());
    tdestado.html((tdestado.children("input[type=checkbox]").is(":checked") ? '<i class="fa fa-check-square-o"></i>' : '<i class="fa fa-square-o"></i>'));
    tdbuttons.html('<a class="btn btn-primary btn-circle edit"><i class="fa fa-edit"></i></a><a class="btn btn-danger btn-circle remove"><i class="fa fa-remove"></i></a>');
}
};

услуг js:

var fn_callmethod = function(url, data, success, error) {
$.ajax({
    type: "POST",
    url: url,
    data: data,
    contentType: "application/x-www-form-urlencoded; charset=utf-8",
    dataType: "json",
    success: success,
    error: error
});
};
var fn_callmethod_get = function(url, data, success, error) {
$.ajax({
    type: "GET",
    url: url,
    data: data,
    contentType: "application/x-www-form-urlencoded; charset=utf-8",
    dataType: "json",
    success: success,
    error: error
});
};
function combo(url, id) {
$.ajax({
    type: "GET",
    url: base_url + url,
    contentType: "application/x-www-form-urlencoded; charset=utf-8",
    dataType: "json",
    success: function(data) {
        var option = "<option value='0'>----Seleccione----</option>";
        var tam = data.length;
        $("#" + id).append(option);
        for (var i = 0; i < tam; i++)
        {
            var option = $(document.createElement('option'));
            option.text(data[i].Descripcion);
            option.val(data[i].Codigo);
            $("#" + id).append(option);
        }
    }
});
}
var fn_iniciarDT = function(oTable, idtable) {
oTable = $("#" + idtable).dataTable({
    "iDisplayLength": 25,
    "aLengthMenu": [[15, 25, 50, 100, -1], [15, 25, 50, 100, "All"]],
    "language": {
        "lengthMenu": "Mostrar _MENU_ registros por p&aacute;gina",
        "zeroRecords": "Nada encontrado - lo siento",
        "info": "Mostrando la p&aacute;gina _PAGE_ de _PAGES_",
        "infoEmpty": "No hay registro disponibles.",
        "infoFiltered": "(Filtrado _MAX_ registros en total)",
        "sSearch": "Buscar:",
        "oPaginate": {
            "sFirst": "Primero",
            "sLast": "Ultimo",
            "sNext": "Siguiente",
            "sPrevious": "Anterior"
        }
    }
});
return oTable;
};

PD: Единственная деталь, которой я даже не добиваюсь descubir, они:

1), как санкционирование (в функции add и edit я верю в ящики текста и select), вопрос такой, как я могу санкционировать их. 2) Как знание, посылает ли меня succes или ошибка (а именно, если он перемещает cath в моем servlet, как посылание этого как ошибка)

0
ответ дан 24.11.2019, 13:32

Для того, чтобы ты функционировало то, что ты хочешь сделать, ты нуждаешься в том, чтобы написать в ней sesiГіn request, итак, как я вижу в тебе cГіdigo ту же самую peticiГіn, который ты посылаешь, является тем же самым, что ты пишешь, и оно ты не будет функционировать, из-за которого, закончив просьбу, стоимость, которую ты написал, теряется, так что tendiras, что делать что-то как это:

request.getSession().setAttribute("factores",factores);

Сейчас уже был бы должен тебе функционировать.

По моему смиренному мнению я верю в то, что, что ты делаешь эту плохо, хотя оно ты будет функционировать, из-за простого факта, из которого ты делаешь одна peticiГіn AJAX, когда ты используешь JSP.

, Если ты будешь использовать JSP и JSTL лучшее, что ты можешь использовать, состоит в том, чтобы делать binding между твоим контрольным прибором и твоим JSP для того, чтобы переменные, которые у тебя есть в твоем контрольном приборе, были теми же самыми, что ты считаешь выставленными в твоем JSP и можешь соглашаться с родной формы до них.

, Если ты предпочитаешь использовать AJAX в тебе aplicaciГіn лучшее, состоит в том, чтобы ты оставил в стороне JSP и прошел в frameworks и книжные магазины, сделанный для этого как Угловой, Ember, и т.д.

0
ответ дан 24.11.2019, 13:32
  • 1
    В действительности сервер будет отвечать petici и # 243; n Аякс с фрагментом HTML, который он будет производить начиная с обработки JSP. Он мне не кажется плохим, но s и # 237; я считаю, что он необычный. Сейчас, s и # 233; что функционирует, потому что в одном из проектов, в которых работа есть осуществленная часть эксперт и # 237; (для добра или для зла, но оно функционирует). –   31.08.2016, 22:26
  • 2
    К этому я называю его стоимостью. –  Israel Perales 01.09.2016, 21:01
  • 3
    Ты мог бы показывать пример рекомендации, которую он показывает мне. потому что единственная форма, которую я нашел, чтобы называть servlet, была с ajax. Но как я замечаю, когда я звоню в мою страницу из меню (в travez yb href=pagina.jsp) и эта страница загружает automanticamente servlet и где не я arrajo абсолютно совсем не. –  Cesar David Guerrero Hidalgo 02.09.2016, 20:55
  • 4
    И хорошим, является мой первый проект в jsp с servlet даже я " verde" в этих темах. Спасибо за совет. Я оставлю jstl: и #39; ( –  Cesar David Guerrero Hidalgo 02.09.2016, 21:01
  • 5
    Если ты используешь JSP, лучшее, что ты можешь делать, ты состоит в том, чтобы привязываться в Вашу форму работы, которая с JSTL и aqu и # 237; у тебя есть руководитель этого: mkyong.com/spring-mvc/spring-mvc-form-handling-example Сейчас стороны javascript, более сфокусированной на REST aqu и # 237; у тебя есть руководитель и пример ingenieroperales.com/2015/12/07/primeros-pasos-con-spring-1 github.com/ripper2hl/angular-todo –  Israel Perales 03.09.2016, 00:03