Combos anidados con jquery, ayuda

Hola gente de la pagina tengo una consulta para ustedes, tengo una aplicacion con struts spring hibernate, es grande la aplicacion, pero tengo un problema con unos combos anidados. Tengo dos action uno para cargar el primer combo y nose como llamar al segundo action con jquery.
Encontre esto pero no lo entiendo bien

$(document).ready(function(){
----$('#estadoId').change(function(){
--------$.ajax({
------------type: "POST",
------------url: 'la/url',
------------data: { nombreParametro: valorParametro },
------------success: function(respuesta){
----------------alert('AJAX');
------------}
--------});
----});
});

aparte de eso que mas necesito para hacerlo andar? espero su respuesta, muchas gracias.

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de ale_imp

Esto te puede ayudar

http://www.javamexico.org/blogs/ale_imp/combos_encadenados_con_servlets_...
No justamente con las tecnologias que necesitas en vez de hibernate yo uso jdbc pelon y en ves de struts uso servlets que es casi lo mismo.

Culquier duda estamos en contacto.

<script type="text/javascript">
//Observese que la respuesta viene del servlet Paises
$.getJSON("Paises", ////////////////////////////////////////////////((((((((((((((((((((((((((((((((((((((((((((((/////////////////////////////En esta parte va el nombre de tu acttion
    function(data){
        $.each(data.Paises, function(i,item){
            $("#idpaises").append("<option value='"+item.id+"'>"+item.TNAME+"</option>");
        });
    });
$(function(){
        //evento change parececido al onchange de javascript que cambia al seleccionar los Paises
    $("#idpaises").change(function(){
        //Observese que la respuesta viene del servlet Ciudades
        $.getJSON("Ciudades", ////////////////////////////////////////////////((((((((((((((((((((((((((((((((((((((((((((((/////////////////////////////En esta parte va el nombre de tu acttion
{
                //evaluar el id de paises
            id: $(this).val(),
            ajax: 'true'
        },
        function(data){
                //limpiar el option value
            $("#idCiudades").html("");
            $.each(data.Ciuadades, function(i,item2){
                $("#idCiudades").append("<option value='"+item2.id+"'>"+item2.nombre+"</option>");
            });
        });
    });
});
</script
Imagen de jlopezjuy

gracias por responder

hola ale, gracias por responder, voy a intentar con tu ejemplo, por lo de la tecnologia, el cliente queria con esos framework jejeje

Imagen de ale_imp

Pues no importa mucho

Lo importante es q entiendas como con jquery invocas a tu controlador y luego el controlador como invoca al modelo.
El controlador puede ser cualquier tecnología, y el modelo también, es lo chido de aplicar el mvc, no cierras tus proyectos a ciertas tecnologías
cuando al cliente se le antoja cambiar por ejemplo de controlador, puede ser un action de struts un controller de spring mvc o un servlet, las demas capas de abajo ni se enteran.

Yo pienso que sería muy difícil que encuentres un ejemplo exactamente como lo quieres.

Imagen de jlopezjuy

justo eso se me complica, lo

justo eso se me complica, lo de ver donde cambiar para llamar al action y luego usar los datos que retorna el action, se me complica un poco eso jejej

Imagen de ale_imp

haber mejor que llevas

Postea tu código y yo te ayudo.

Imagen de jlopezjuy

codigo

Empezando el primer combo se carga bien con el action de struts,
Esta es la jsp

<%@taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html" %>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@taglib uri="http://displaytag.sf.net" prefix="display"%>
<%@taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%>
<jsp:useBean id="rol" class="com.alimentosbenedetto.pastas.modelo.dominio.Rol"></jsp:useBean>
<%@page import="com.alimentosbenedetto.pastas.view.struts.actions.ordenesproduccion.InsumoLoteBrowseAction" %>
<c:set var="myRol" value="${sessionScope.rolId}"></c:set>
<SCRIPT type='text/javascript'>
function clearElements(combo){  
          combo.options.length = 0;  
          nuevaOpcion = new Option("", "");        
          combo.options[0] = nuevaOpcion;
          i = 0;
          var detalleOPDiaria = document.forms[0].detalleOPDiaria.options[document.forms[0].detalleOPDiaria.selectedIndex].value;
          if(detalleOPDiaria != '')
                 opcionSeleccionar = new Option('Cargando...', '');
          else
                 opcionSeleccionar = new Option('Seleccionar', '');              

          combo.options[i] = opcionSeleccionar;
}
function reloadInsumosProveedores()     {      
           clearElements(document.forms[0].insumoProveedor);
           
           var id = document.forms[0].detalleOPDiaria.value;
           new Ajax.Request('<html:rewrite page="/reloadInsumoProveedor.do"/>', {
                  encoding: 'ISO-8859-1',
                  method : 'post',
                  parameters: {detalleOPDiariaId: id},
              onComplete: function(transport, json) {                
                if(json.executeError){
                                alert(json.executeError);
                        }
                i = 0;  
                while (i < json.length){
                        var property = json[i].insumoProveedorId;
                        var nom = json[i].nomenclaturaLoteInterno;
                        nom = nom.replace(/&Ntilde;/g, 'Ñ');
                        var propertyLabel = nom;
                        var cantidadEstimada = json[i].cantidadEstimada;
                        var cantidadUsada = json[i].cantidadUsada;
                       
                        //9999: es usado para guardar cantidad
                        if(property != '9999'){
                            nuevaOpcion = new Option(propertyLabel, property);        
                            document.forms[0].insumoProveedor.options[i] = nuevaOpcion;
                        }else{
                                //document.forms[0].unidad.value = propertyLabel;
                                document.forms[0].cantidadEstimada.value = cantidadEstimada;
                                document.forms[0].cantidadUsada.value = cantidadUsada;
                        }                          
                        i++;
                    }
               
                //pregunto si es igual a 1 porque siempre va a venir almenos la unidad
                    if(json.length == 1){
                                opcionSeleccionar = new Option('Seleccionar', '');
                                document.forms[0].insumoProveedor.options[0] = opcionSeleccionar;                  
                    }    
              }
           });
}

function reloadCombo(){
        $(document).ready(function(){
                $('#insumosProveedores').change(function(){
                        $.ajax({
                                type: "POST",
                                url: 'reloadInsumoProveedor.do',
                                data: { detalleOPDiariaId: detalleOPDiariaId },
                                success: function(respuesta){
                                        alert('AJAX');
                                }
                        });
                });
        });
}

</script>
        <h2><bean:message key="insumoLote.title.lote"/>${loteId}</h2>
       
        <div align="center">
               
           <html:form action="/insumoLoteAbm.do?event=create" onsubmit="return validateInsumoLoteAbmForm(this);">
                   <html:javascript formName="insumoLoteAbmForm" />
                   <html:hidden property="event" />
                   <html:hidden property="insumoUtilizadoId" />
                   <html:hidden property="lote" />
                   <table class="borders">
                                <tr>
                                        <td width="60px"><bean:message key="insumoLote.opDiaria.numero"/></td>
                                        <td><html:text property="ordenProdNum" size="10" maxlength="50" readonly="true"></html:text></td>
                                        <td width="60px"><bean:message key="insumoLote.opDiaria.fecha"/></td>
                                        <td><html:text property="fecha" size="10" maxlength="50" readonly="true"></html:text></td>
                                </tr>
                                <tr>
                                        <td width="60px"><bean:message key="insumoLote.opDiaria.semana"/></td>
                                        <td><html:text property="semana" size="10" maxlength="50" readonly="true"></html:text></td>
                                       
                                </tr>
                </table>
                        <table class="borders">
                                <tr>
                                        <td width="60px"><bean:message key="insumoLote.opDiaria.producto"/></td>
                                        <td><html:text property="producto" size="50" maxlength="50" readonly="true"></html:text></td>
                                        <td width="140px"><bean:message key="insumoLote.opDiaria.cantidadEnvase"/></td>
                                        <td><html:text property="cantidadEnvase" size="10" maxlength="50" readonly="true"></html:text></td>
                                </tr>
                        </table>
                <table class="borders">
                        <tr>
                                <td width="140px"><bean:message key="insumoLote.opDiaria.loteProduccion"/></td>
                                <td><html:text property="nomenclatura" size="30" maxlength="50" readonly="true"></html:text></td>
                        </tr>
                </table>
                <c:if test="${myRol eq rol.ROL_SUPERVISOR}">
                <div class="addInsumo">
                        <div class="textWhite">
                                        <bean:message key="insumoLote.opDiaria.ingredientes"/>
                                        <html:select property="detalleOPDiaria" styleClass="textoInput" onchange="javascript:reloadCombo();">
                                                                <html:option value=""><bean:message key="general.text.seleccionar"/></html:option>
                                                                <html:optionsCollection name="detallesOpDiarias" value="detalleOPDiariaId" label="detalle" />
                                                        </html:select>
                                                <bean:message key="insumoLote.opDiaria.cantidadEstimada"/>:
                                                <html:text property="cantidadEstimada" size="5"  readonly="true"></html:text>
                                                <bean:message key="insumoLote.opDiaria.cantidadUsada"/>
                                                <html:text property="cantidadUsada" size="5" readonly="true"></html:text>
                                               
                                                <br/><br/>
                                        <bean:message key="insumoLote.opDiaria.insumoProveedor"/>:
                                                <html:select property="insumoProveedor" styleClass="textoInput" >
                                                        <html:option value=""><bean:message key="general.text.seleccionar"/></html:option>
                                                                <html:optionsCollection name="insumosProveedores" value="insumoProveedorId" label="nomenclaturaProveedorCantidad" />
                                                        </html:select>
                                                <bean:message key="insumoLote.opDiaria.cantidad"/>: <html:text property="cantidad" size="10" maxlength="10"></html:text>       
                                                <br/><br/><input type="submit" value='<bean:message key="general.boton.agregar"/>' class="button" />
                        </div>
                </div>
                </c:if>
    </html:form>
   
        <br/><font color="red"><html:errors/></font>    
    <br/><font color="blue"> <html:messages id="msg" message="true" property="message"><bean:write name="msg"/><br> </html:messages> </font>
   
        <display:table id="insumosLotes" name='<%=InsumoLoteBrowseAction.COLLECTION_NAME %>' class="isis" decorator="com.alimentosbenedetto.pastas.view.displaytag.DisplaytagTableDecorator"
                requestURI="/insumoLoteAbm.do" >
                <display:column property="insumoUtilizadoId" title="ID" sortable="true" />             
                <display:column property="insumoProveedor.nomenclaturaLoteInterno" title="Lote Interno" sortable="true"  style="width: 80px;text-align: left;"/>
                <display:column property="insumoProveedor.proveedor.nombre" title="Proveedor" sortable="true"  style="width: 250px;text-align: left;"/>
                <display:column property="cantidad" title="Cantidad" sortable="true"  style="width: 80px;text-align: left;"/>
                <display:column property="detalleOPDiaria.insumo.unidad.denominacion" title="Unidad" sortable="true"  style="width: 50px;text-align: left;"/>
                <display:column property="costoInsumoUtilizado" title="Costo Insumo Utilizado" sortable="true"  style="width: 150px;text-align: left;"/>
                <display:column property="creationUser" title="Usr. Creación" sortable="true"  style="width: 70 px;text-align: left;"/>
                <display:column property="insumoLoteDelete" title='Eliminar' style="width: 100px; text-align:center;" />
        </display:table>
        <br/><html:link page="/loteProduccionAbm.do?event=init&opDiariaId=${opDiariaId}"><bean:message key="general.boton.volver"/></html:link>
        </div>
        <br/><br/><br/>

lo que me falta es cargar el segundo combo, no lo logro hacer

Este es el action que carga el segundo combo

package com.alimentosbenedetto.pastas.view.struts.actions.ordenesproduccion;

import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import com.alimentosbenedetto.pastas.modelo.dominio.DetalleOPDiaria;
import com.alimentosbenedetto.pastas.modelo.dominio.InsumoProveedor;
import com.alimentosbenedetto.pastas.modelo.dominio.OrdenProduccionDiaria;
import com.alimentosbenedetto.pastas.view.struts.actions.BaseAction;

public class ReloadInsumoProveedorAction extends BaseAction {
        private static final Logger logger = Logger.getLogger(ReloadInsumoProveedorAction.class);
        @Override
        public ActionForward execute(ActionMapping mapping, ActionForm form,
                        HttpServletRequest request, HttpServletResponse response) throws Exception {
                String detalleOPDiariaId = request.getParameter("detalleOPDiariaId");
                DetalleOPDiaria detalle = (DetalleOPDiaria)getServicioMaster().getDetalleOPDiariaDao().get(Integer.parseInt(detalleOPDiariaId));
                logger.debug("detalleOPDiariaId para ajax: " + detalleOPDiariaId);
                OrdenProduccionDiaria opDiaria = detalle.getOrdenProduccionDiaria();
                reloadInsumoProveedor(request, response, detalleOPDiariaId);
                List<DetalleOPDiaria> listaOpDiarias = getServicioMaster().getDetalleOPDiariaDao().findOPDiarias(opDiaria.getOpDiariaId());
                logger.debug("cantidad de listas para la opDiaria: "+listaOpDiarias.size());
                request.setAttribute("detallesOpDiarias", listaOpDiarias);
                response.setContentType("application/x-json;charset=UTF-8");
                response.setCharacterEncoding("UTF-8");
                return mapping.findForward(FORWARD_INIT);
               
        }

   
        public void reloadInsumoProveedor(HttpServletRequest request,
            HttpServletResponse response, String insumoDescripcion)
            throws Exception
        {

                        if (insumoDescripcion != null && StringUtils.isNotEmpty(insumoDescripcion)) {
                                DetalleOPDiaria detalle = (DetalleOPDiaria)getServicioMaster().getDetalleOPDiariaDao().findOne(Integer.parseInt(insumoDescripcion));
                               
                List<InsumoProveedor> objects = getServicioMaster().getInsumoProveedorDao().findAll(detalle.getInsumo().getInsumoId());
                logger.debug("Cantidad de proveedores: "+ objects.size());
                request.setAttribute("insumosProveedores", objects);
           
                logger.debug("ANTES DE ENTRAR AL JSONArray");
                JSONArray json = new JSONArray();
               
                for(InsumoProveedor proveedor: objects){
                        JSONObject jsonObject = new JSONObject();                      
                        jsonObject.put("insumoProveedorId", proveedor.getInsumoProveedorId());
                        logger.debug("Antes del cambio:"+proveedor.getNomenclaturaProveedorCantidad());
                        logger.debug("Despues del cambio: "+ cambio(proveedor.getNomenclaturaProveedorCantidad()));
                        jsonObject.put("nomenclaturaLoteInterno", proveedor.getNomenclaturaProveedorCantidad());//cambio(proveedor.getNomenclaturaProveedorCantidad()));    
                        json.add(jsonObject);
                }
               
                //Agrego un objeto mas para llevar la cantidad Estimada y Cantidad Real Usada
                JSONObject jsonObject = new JSONObject();
               
                response.setCharacterEncoding("UTF-8");
                jsonObject.put("insumoProveedorId", "9999");
                jsonObject.put("nomenclaturaLoteInterno", detalle.getInsumo().getUnidad().getDenominacion());
                jsonObject.put("cantidadEstimada", detalle.getCantidadEstimada());
                jsonObject.put("cantidadUsada", detalle.getCantidadRealUsada());
                json.add(jsonObject);
           
                response.setContentType("application/x-json;charset=UTF-8");
                response.setHeader("X-JSON", json.toString());
                response.getWriter().write(json.toString());
            }
        }
        private String cambio(String nomenclatura){
                String nom = nomenclatura;
                String search = "Ñ";
                String sub = "&Ntilde;";
                String result = "";
                int i;
                do {
                        i = nom.indexOf(search);
                        if (i != -1) {
                                result = nom.substring(0,i);
                                result = result + sub;
                                result = result +nom.substring(i + search.length());
                                nom = result;
                        }
                       
                } while (i != -1);
                return nom;
        }
}

Como veras tube que agregar un metodo que cambie las Ñ por Ñ
y trate de ponerle la codificacion al response pero no hay caso sigue sin funcionar si hay ñ en algun dato

Imagen de jlopezjuy

Aqui el action principal que

Aqui el action principal que carga la jsp con el primer combo

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.Logger;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionRedirect;

import com.alimentosbenedetto.pastas.modelo.dominio.DetalleOPDiaria;
import com.alimentosbenedetto.pastas.modelo.dominio.InsumoProveedor;
import com.alimentosbenedetto.pastas.modelo.dominio.InsumoUtilizado;
import com.alimentosbenedetto.pastas.modelo.dominio.Lote;
import com.alimentosbenedetto.pastas.modelo.dominio.OrdenProduccionDiaria;
import com.alimentosbenedetto.pastas.modelo.dominio.Producto;
import com.alimentosbenedetto.pastas.util.Constantes;
import com.alimentosbenedetto.pastas.util.FechaUtil;
import com.alimentosbenedetto.pastas.view.struts.actions.BaseCrudAction;
import com.alimentosbenedetto.pastas.view.struts.forms.ordenesproduccion.InsumoLoteAbmForm;
/**
 *
 * @author JLopez
 *
 */

public class InsumoLoteAbmAction extends BaseCrudAction {
        private static final Logger logger = Logger.getLogger(InsumoLoteAbmAction.class);
       
        /**
         * Carga los combos
         * @param request
         */

        @SuppressWarnings("unchecked")
        private void setInitialAttributes(HttpServletRequest request,Lote lote){
                OrdenProduccionDiaria opDiaria = lote.getOrdenProduccionDiaria();
                Integer opDiariaId = opDiaria.getOpDiariaId();
                List<DetalleOPDiaria> listaOpDiarias = getServicioMaster().getDetalleOPDiariaDao().findOPDiarias(opDiariaId);
                request.setAttribute("detallesOpDiarias", listaOpDiarias);
                List<InsumoProveedor> listaInsumosProveedores = new ArrayList<InsumoProveedor>();//getServicioMaster().getInsumoProveedorDao().findAllOrdered("nomenclaturaLoteInterno");
                request.setAttribute("insumosProveedores", listaInsumosProveedores);
                request.setAttribute("loteId", lote.getLoteId());
                request.setAttribute("opDiariaId", lote.getOrdenProduccionDiaria().getOpDiariaId());
                List<InsumoUtilizado> listaInsumoaUtilizados = getServicioMaster().getInsumoUtilizadoDao().findAll(lote.getLoteId());
                request.setAttribute(InsumoLoteBrowseAction.COLLECTION_NAME, listaInsumoaUtilizados);
        }
        /**
         * Recarga los combos
         * @param request
         * @param lote
         */

        @SuppressWarnings("unchecked")
        private void setReloadInitialAttributes(HttpServletRequest request,Lote lote,Integer detalleOPDiariaId, Integer insumoProveedorId,InsumoLoteAbmForm insumoLoteForm){
                OrdenProduccionDiaria opDiaria = lote.getOrdenProduccionDiaria();
                Integer opDiariaId = opDiaria.getOpDiariaId();
                List<DetalleOPDiaria> listaOpDiarias = getServicioMaster().getDetalleOPDiariaDao().findOPDiarias(opDiariaId);
                request.setAttribute("detallesOpDiarias", listaOpDiarias);
                DetalleOPDiaria detalle = (DetalleOPDiaria)getServicioMaster().getDetalleOPDiariaDao().findOne(detalleOPDiariaId);
                request.setAttribute("opDiariaId", lote.getOrdenProduccionDiaria().getOpDiariaId());
        List<InsumoProveedor> insumosProveedores = getServicioMaster().getInsumoProveedorDao().findAll(detalle.getInsumo().getInsumoId());
       
        request.setAttribute("insumosProveedores", insumosProveedores);
               
        request.setAttribute("loteId", lote.getLoteId());
                List<InsumoUtilizado> listaInsumoaUtilizados = getServicioMaster().getInsumoUtilizadoDao().findAll(lote.getLoteId());
                request.setAttribute(InsumoLoteBrowseAction.COLLECTION_NAME, listaInsumoaUtilizados);
                insumoLoteForm.setInsumoProveedor(insumoProveedorId.toString());
                insumoLoteForm.setDetalleOPDiaria(detalleOPDiariaId.toString());
        }
        /**
         * Agrego datos al formulario
         * @param insumoLoteForm
         * @param lote
         */

        private void setInsumoLoteForm(InsumoLoteAbmForm insumoLoteForm, Lote lote){
                OrdenProduccionDiaria opDiaria = lote.getOrdenProduccionDiaria();
                Producto producto = opDiaria.getProducto();
                insumoLoteForm.setOrdenProdNum(opDiaria.getOpDiariaId().toString());
                insumoLoteForm.setSemana(FechaUtil.getWeekOfMonth(opDiaria.getFecha()).toString());
                insumoLoteForm.setFecha(opDiaria.getFechaFormatted());
                insumoLoteForm.setProducto(producto.getDescripcion());
                insumoLoteForm.setCantidadEnvase(opDiaria.getTotalProducto().toString());
                insumoLoteForm.setNomenclatura(lote.getNomenclatura());
                insumoLoteForm.setLote(lote.getLoteId().toString());
               
        }
        /**
         * Se setea los datos del formulario a la clase InsumoUtilizado
         * @param insumoLoteForm
         * @param lote
         * @param request
         * @return
         */

        private InsumoUtilizado getInsumoUtilizado(InsumoLoteAbmForm insumoLoteForm,Lote lote,HttpServletRequest request){
                InsumoUtilizado insumoUtilizado = new InsumoUtilizado();
                Integer detalleOpD = Integer.parseInt(insumoLoteForm.getDetalleOPDiaria());
                DetalleOPDiaria detalle = (DetalleOPDiaria)getServicioMaster().getDetalleOPDiariaDao().get(detalleOpD);
                logger.debug("Detalle OPDiarioa: "+detalle.getDetalleOPDiariaId());
                Integer insumoProveedorId = Integer.parseInt(insumoLoteForm.getInsumoProveedor());
                InsumoProveedor insumoProveedor = (InsumoProveedor)getServicioMaster().getInsumoProveedorDao().get(insumoProveedorId);
                logger.debug("Insumo Proveedor: "+insumoProveedor.getInsumoProveedorId());
                insumoUtilizado.setDetalleOPDiaria(detalle);
                insumoUtilizado.setCantidad(Double.parseDouble(insumoLoteForm.getCantidad()));
                insumoUtilizado.setLote(lote);
                insumoUtilizado.setInsumoProveedor(insumoProveedor);
                insumoUtilizado.setCostoInsumoUtilizado(insumoUtilizado.getCantidad() * insumoProveedor.getCostoUnitario());
                actualizarDatos(insumoLoteForm, detalle, insumoProveedor, request);
                return insumoUtilizado;
        }
        /**
         * Metodo para actualizar datos de DetalleOpDiaria e InsumoProveedor
         * @param insumoLoteForm
         * @param detalle
         * @param insumoProveedor
         * @param request
         */

        @SuppressWarnings("unchecked")
        private void actualizarDatos(InsumoLoteAbmForm insumoLoteForm,
                        DetalleOPDiaria detalle,InsumoProveedor insumoProveedor, HttpServletRequest request){
                logger.debug("Cantidad Disponible: "+insumoProveedor.getCantidadDisponible());
                logger.debug("Cantidad: "+insumoLoteForm.getCantidad());
                if (insumoProveedor.getCantidadDisponible() == null) {
                        insumoProveedor.setCantidadDisponible(0.0);
                }
                Double cantidadDisponible = insumoProveedor.getCantidadDisponible() - Double.parseDouble(insumoLoteForm.getCantidad());
                insumoProveedor.setCantidadDisponible(cantidadDisponible);
                setModificationAuditFields(insumoProveedor, insumoLoteForm, request);
                getServicioMaster().getInsumoProveedorDao().update(insumoProveedor);
               
                //Actualizando Datos de la orden de produccion
               
                Double cantidadReal = (detalle.getCantidadRealUsada());
                Double cantidad = Double.parseDouble(insumoLoteForm.getCantidad());
                detalle.setCantidadRealUsada(cantidadReal + cantidad);
                Double factorSeguridad = (detalle.getCantidadRealUsada() / detalle.getCantidadEstimada() );
                logger.debug("Cantidad Real Usada: "+detalle.getCantidadRealUsada());
                logger.debug("Factor de Seguridad: "+factorSeguridad);
                detalle.setFactorSeguridad(factorSeguridad);
                setModificationAuditFields(detalle, insumoLoteForm, request);
                getServicioMaster().getDetalleOPDiariaDao().update(detalle, detalle.getCantidadRealUsada(), detalle.getFactorSeguridad(),  getUserFormSession(request));
               
        }
       
        @Override
        protected void initializeAction(ActionMapping mapping, ActionForm form,
                        HttpServletRequest request, HttpServletResponse response) {
                // TODO Auto-generated method stub
                InsumoLoteAbmForm insumoLoteForm = (InsumoLoteAbmForm)form;
                Integer loteId = Integer.parseInt(request.getParameter("loteId"));
                Lote lote = (Lote)getServicioMaster().getLoteDao().finOneLote(loteId);
                setInitialAttributes(request, lote);
                setInsumoLoteForm(insumoLoteForm, lote);
        }

        @Override
        protected void precreateAction(ActionMapping mapping, ActionForm form,
                        HttpServletRequest request, HttpServletResponse response) {
                // TODO Auto-generated method stub

        }
       
        @Override
        public ActionForward create(ActionMapping mapping, ActionForm form,
                        HttpServletRequest request, HttpServletResponse response)
                        throws Exception {
               
                InsumoLoteAbmForm insumoLoteForm = (InsumoLoteAbmForm)form;
                Integer detalleId = Integer.parseInt(insumoLoteForm.getDetalleOPDiaria());
               
                Integer loteId = Integer.parseInt(insumoLoteForm.getLote());
                Lote lote = (Lote)getServicioMaster().getLoteDao().finOneLote(loteId);
                Integer insumoProvId = Integer.parseInt(insumoLoteForm.getInsumoProveedor());
                InsumoProveedor insumoProveedor = (InsumoProveedor)getServicioMaster().getInsumoProveedorDao().get(insumoProvId);
               
                if (insumoProveedor.getEstadoLab().equals(Constantes.ESTADO_LAB_RETENIDO)) {
                        addErrorMessage("insumoLoteAbm.form.error.insumoProveedor.estadoLab", request);
                        setReloadInitialAttributes(request, lote, detalleId, insumoProvId, insumoLoteForm);
                        return mapping.findForward(FORWARD_INIT);
                }
                logger.debug("Fecha de vencimiento: "+ insumoProveedor.getFechaVencimiento());
                if (insumoProveedor.getFechaVencimiento().before(new Date())) {
                        addErrorMessage("insumoLoteAbm.form.error.fechaVencimiento", request);
                        setReloadInitialAttributes(request, lote, detalleId, insumoProvId, insumoLoteForm);
                        return mapping.findForward(FORWARD_INIT);
                }
                Double cantidad = Double.parseDouble(insumoLoteForm.getCantidad());
                if (cantidad.doubleValue() == 0){
                        addErrorMessage("insumoLoteAbm.form.error.cantidad", request);
                        setReloadInitialAttributes(request, lote, detalleId, insumoProvId, insumoLoteForm);
                        return mapping.findForward(FORWARD_INIT);
                }
                if (cantidad.doubleValue() > insumoProveedor.getCantidadDisponible()) {
                        addErrorMessage("insumoLoteAbm.form.error.cantidadDisponible", request);
                        setReloadInitialAttributes(request, lote, detalleId, insumoProvId, insumoLoteForm);
                        return mapping.findForward(FORWARD_INIT);
                }
                InsumoUtilizado insumoUtilizadoExistente = getServicioMaster().getInsumoUtilizadoDao().find(lote, insumoProveedor, Integer.parseInt(insumoLoteForm.getDetalleOPDiaria()));
                if(insumoUtilizadoExistente != null){
                        addErrorMessage("insumoLoteAbm.form.error.exist.InsumoUtilizado", request);
                        setReloadInitialAttributes(request, lote, detalleId, insumoProvId, insumoLoteForm);
                        return mapping.findForward(FORWARD_INIT);
                }
               
                InsumoUtilizado insumoUtilizado = getInsumoUtilizado(insumoLoteForm, lote, request);
               
                setCreateAuditFields(insumoUtilizado, request);
                getServicioMaster().getInsumoUtilizadoDao().save(insumoUtilizado);
               
                //Actualizo LOTE.COSTO_ELABORACION
                Double costoElaboracion = null;
                if(lote.getCostoElaboracion() == null)
                    costoElaboracion = insumoUtilizado.getCostoInsumoUtilizado();
                else
                        costoElaboracion = lote.getCostoElaboracion() + insumoUtilizado.getCostoInsumoUtilizado();
                getServicioMaster().getLoteDao().updateCostoElaboracion(lote, costoElaboracion, getUserFormSession(request));
                       
                ActionRedirect redirect = new ActionRedirect(mapping.findForward("create"));
            redirect.addParameter("event", "init");
            redirect.addParameter("loteId", Integer.parseInt(insumoLoteForm.getLote()));
            return redirect;
        }

        @Override
        protected void createAction(ActionMapping mapping, ActionForm form,
                        HttpServletRequest request, HttpServletResponse response) {
               
        }

        @Override
        protected void preupdateAction(ActionMapping mapping, ActionForm form,
                        HttpServletRequest request, HttpServletResponse response) {
                // TODO Auto-generated method stub

        }

        @Override
        protected void updateAction(ActionMapping mapping, ActionForm form,
                        HttpServletRequest request, HttpServletResponse response) {
                // TODO Auto-generated method stub

        }
       
        private void actualizarLote(HttpServletRequest request, InsumoUtilizado insumoUtilizado){
                Lote lote = (Lote)getServicioMaster().getLoteDao().get(insumoUtilizado.getLote().getLoteId());
                Double costoElaboracion = lote.getCostoElaboracion() - insumoUtilizado.getCostoInsumoUtilizado();
                getServicioMaster().getLoteDao().updateCostoElaboracion(lote, costoElaboracion, getUserFormSession(request));
        }
       
        private void actualizarInsumoProveedor(HttpServletRequest request, ActionForm form, InsumoUtilizado insumoUtilizado){
                InsumoLoteAbmForm insumoLoteForm = (InsumoLoteAbmForm)form;
                InsumoProveedor insumoProveedor = (InsumoProveedor)getServicioMaster().getInsumoProveedorDao().get(insumoUtilizado.getInsumoProveedor().getInsumoProveedorId());
                Double cantidad = insumoProveedor.getCantidadDisponible() + insumoUtilizado.getCantidad();
                insumoProveedor.setCantidadDisponible(cantidad);
                setModificationAuditFields(insumoProveedor, insumoLoteForm, request);
                getServicioMaster().getInsumoProveedorDao().update(insumoProveedor);
        }
       
        private void actualizarDetalleOPDiaria(HttpServletRequest request, ActionForm form, InsumoUtilizado insumoUtilizado){
                InsumoLoteAbmForm insumoLoteForm = (InsumoLoteAbmForm)form;
                DetalleOPDiaria detalleOPDiaria = (DetalleOPDiaria)getServicioMaster().getDetalleOPDiariaDao().get(insumoUtilizado.getDetalleOPDiaria().getDetalleOPDiariaId());
                Double cantidadRealUsada = (detalleOPDiaria.getCantidadRealUsada() - insumoUtilizado.getCantidad());
                Double factorSeguridad = (cantidadRealUsada / detalleOPDiaria.getCantidadEstimada());
               
                setModificationAuditFields(detalleOPDiaria, insumoLoteForm, request);
                logger.debug("Actualizando detalle.");
                getServicioMaster().getDetalleOPDiariaDao().update(detalleOPDiaria, cantidadRealUsada, factorSeguridad,  getUserFormSession(request));
        }
       
        @Override
        public ActionForward delete(ActionMapping mapping, ActionForm form,
                        HttpServletRequest request, HttpServletResponse response)
                        throws Exception {
                InsumoLoteAbmForm insumoLoteForm = (InsumoLoteAbmForm)form;
                Integer insumoUtilizadoId = Integer.parseInt(request.getParameter("insumoUtilizadoId"));
                InsumoUtilizado insumoUtilizado = (InsumoUtilizado)getServicioMaster().getInsumoUtilizadoDao().get(insumoUtilizadoId);
               
                actualizarLote(request, insumoUtilizado);
                actualizarInsumoProveedor(request, insumoLoteForm, insumoUtilizado);
                actualizarDetalleOPDiaria(request, insumoLoteForm, insumoUtilizado);
               
                setModificationAuditFields(insumoUtilizado, insumoLoteForm, request);
                getServicioMaster().getInsumoUtilizadoDao().delete(insumoUtilizado.getInsumoUtilizadoId());
               
                ActionRedirect redirect = new ActionRedirect(mapping.findForward("delete"));
            redirect.addParameter("event", "init");
            redirect.addParameter("loteId", insumoUtilizado.getLote().getLoteId());
            return redirect;
        }
        @Override
        protected void deleteAction(ActionMapping mapping, ActionForm form,
                        HttpServletRequest request, HttpServletResponse response) {
                // TODO Auto-generated method stub

        }

}

Imagen de jlopezjuy

Lo que me faltaria es que me

Lo que me faltaria es que me expliques la diferencia de llamar a un action struts y no de servlet, o como es, eso es lo unico que me falta entender.

PD: la parte de javascript en el jsp, lo programo el arquitecto, no me puede ayudar por qu esta en un proyecto para motorola y bue nos quedamos solos. jejejeje