Ver Mensaje Individual
  #1 (permalink)  
Antiguo 08/07/2013, 13:02
abulon81
 
Fecha de Ingreso: mayo-2010
Mensajes: 99
Antigüedad: 14 años
Puntos: 5
spring combos dependientes

Wenas, aqui comparto como se puede hacer combos dependientes mediante Spring MVC usando jax y jquery , espero le sirva a alguien

formulario contacto.jsp

Código PHP:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1" %>
<%@ 
taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<%@ 
taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@
taglib prefix "c" uri "http://java.sun.com/jsp/jstl/core" %>
<%@ 
page isELIgnored="false" %> 
<!
DOCTYPE html>
<
html >

<
head>
<
meta charset="utf-8"/>
<
meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/>

<
title></title>

<
meta name="description" content="HTML 5 CSS 3 Spring Form"/>
<
meta name="viewport" content="width=device-width,initial-scale=1"/>

</
head>

<
body>
    <
div id="container">
         <
form  method="post" action="tabs.htm">

            <
h1>Formulario test...</h1>

            <
fieldset id="user-details">
               <
div id="cont1">
                <
label for="name" >Name: </label
                <
input type="text" name="name"
                    
value="" id="name" placeholder="Your Name" required="required"
                    
autofocus="autofocus"  /> 
                <
label for="email" >Email: </label>
                <
input type="email" name="email" value="" id="email" placeholder="[email protected]required="required"  /> 
                </
div>
                <
div id="cont2">
                <
label for="phone" >Phone:</label
                <
input type="text" name="phone" value=""  />
                <
label for="website" >Website:</label
                <
input type="url" name="website" value=""  />
                </
div>
            </
fieldset>
            <!--
end user-details-->
            
            <
fieldset id="user-message">

                <
label for="message" >Your Message: </label>
                <
textarea name="message" rows="0" cols="0" ></textarea>

            
        <
div id="combo1">
        <
select name="paises" id="paises" >
            <
option value="-1">--Select your country--</option>
            <
c:forEach items="${listCountries}" var="city">
                <
option value="<c:out value="${city.idcity}" />"><c:out value="${city.city}" /></option>
            </
c:forEach>
        </
select>
        </
div>    
        <
div id="combo2">
        <
select name="states" id="states" disabled="disabled" >
        <
option>--Select state--</option>
        </
select>    
        </
div>
            </
fieldset>
            <
br>
            <
input type="submit" value="Submit Message" name="submit"
                    
class="submit" />
         </
form>  
        
                
    </
div>
    <!--! 
end of #container -->

<script type="text/javascript" language="javascript">

jQuery(document).ready(function() {

var 
contexPath "<%=request.getContextPath() %>";

    $(
'#paises').change( function(e) {
    
    if(
jQuery(this).val()!="-1"){
     $(
'#states').find('option').remove().end()
     .
append('<option value="-1">--Select state--</option>');
   
        
e.preventDefault();
        var 
val = $(this).val();
        
jQuery("#states").removeAttr("disabled");
        
        
alert(val);
            
//$('#othstate').val('').hide();
            
$.ajax({
               
type"POST",
               
url:  contexPath '/loadcities.htm',
               
dataType'json',
               
data: { idpais val },
               
success: function(data) {
               
alert(data.lstStates);
               
showUsers(data.lstStates);
                  
// $('#states').html( data.lstStates );
               
},
               
error:
               function(
e){
             
alert('Error: ' e);
             } 
            });
        }
        else {
           $(
"#states").attr("disabled","disabled");
        $(
'#states').find('option').remove().end()
           .
append('<option value="-1">--Select state--</option>');
        }
    });

    function 
showUsers(data) {
 
        for ( var 
0len data.lengthlen; ++i) {
            var 
msajax data[i];
            $(
'#states').append("<option value=\"" +msajax.idciudad "\">" msajax.ciudad"</option>");
        }
    }

});
</script>

</body>
</html> 
controlador: inventoryControlador.java

Código PHP:
package com.controlador;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

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

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
.........................

@
Controller
@SessionAttributes({"menu","perfilspring","user"})
public class 
inventoryControl {
    
    protected final 
Log logger LogFactory.getLog(getClass());
    @
Autowired
    
@Qualifier("searchService")
    private 
searchService service;
    
    @
RequestMapping(value="/contacto",method RequestMethod.GET)
    public 
String onlog(usuario us,HttpServletRequest request,HttpServletResponse responseModelMap model) {
    
//public String onlog(usuario us,@ModelAttribute ("perfilspring") String p) {
    //public @ResponseBody Map<String,Object> onlog(HttpServletRequest request,HttpServletResponse response)
    //throws Exception{
         
logger.info("entro inventorycontrolador");
         
ArrayList<catalogBeanlst = new ArrayList<catalogBean>(); 
         
lst.add(new catalogBean("MX","Mexico"));
         
lst.add(new catalogBean("BRA","Brasil"));
         
lst.add(new catalogBean("COL","Colombia"));
         
lst.add(new catalogBean("MY","Malaysia"));
         
lst.add(new catalogBean("CHINA","China"));
         
lst.add(new catalogBean("SG","Singapore"));
         
lst.add(new catalogBean("US","USA"));

        
         List 
countries = new ArrayList();
            
countries.add(new countries("IND","INDIA"));
            
countries.add(new countries("US","USA"));
            
countries.add(new countries("AU","AUSTRALIA"));
            
countries.add(new countries("MX","MEXICO"));
            
countries.add(new countries("COL","COLOMBIA"));
            
            
model.addAttribute("listCountries",countries);
          
         return 
"contacto";
         }
    
    
/*
     * para submit de form
     */
    
@RequestMapping(value="/tabs",method=RequestMethod.POST)
    
//public String tabs(usuario us,@ModelAttribute ("perfilspring") String p, @RequestParam(value="name",required=true) String nombre, Map<String, Object> model)
    
public String tabs(@RequestParam("name"String text,@RequestParam("paises"String idpais,@RequestParam("states"String states)
    {
        
logger.info("entro tabs");
        
logger.info("parametro caja ::"+text "combocountry eleg :"+idpais+" combocities eleg:"+states);
        
        return 
"tabs";
    }
    
    
    
/*
     * Probado jala ok para cargar combo hijo
     */
    
@RequestMapping(value="/loadcities")
    public @
ResponseBody Map<String,ObjectgetCiudades(HttpServletRequest request,HttpServletResponse response,@RequestParam(value="idpais",required=trueString idcity)
    
throws Exception{
        
logger.info("cargando lista ciudades..");
        
logger.info("parametro combo ::"+idcity);
        
logger.info("idp >>"+request.getParameter("idpais"));
      
Map<String,Objectmap = new HashMap<StringObject>();

      List 
bus_list = new ArrayList();
      
bus_list service.getEstados(idcity);
      
      
map.put("lstStates"bus_list);
     
    return 
map;
    }
    
    

la capa servicio

Código PHP:

package com
.servicio;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Logger;

import javax.sql.DataSource;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.simple.SimpleJdbcTemplate;
................................

@
Component
@Qualifier("searchService")
@
Service
public class searchService implements serviceInterface  {

........................

@
SuppressWarnings("unchecked")
    public List 
getEstados(String idcity)
    {
        List  
cities = new ArrayList();
        if(
idcity.equalsIgnoreCase("MX")){
            
cities.add(new citiesBean("MORMX","Morelos"));
            
cities.add(new citiesBean("CANMX","Cancun"));
            
cities.add(new citiesBean("VERMX","Veracruz"));
        }
        else if(
idcity.equalsIgnoreCase("US")){
            
cities.add(new citiesBean("MS","Masachusets"));
            
cities.add(new citiesBean("SF","San Francisco"));
            
cities.add(new citiesBean("HT","Houston"));
        }
        else if(
idcity.equalsIgnoreCase("COL")){
            
cities.add(new citiesBean("BOG","Bogota"));
            
cities.add(new citiesBean("MED","Medellin"));
            
cities.add(new citiesBean("CTG","Cartagena"));
        }
        else if(
idcity.equalsIgnoreCase("IND")){
            
cities.add(new citiesBean("YAK","Yakarta"));
            
cities.add(new citiesBean("BOY","Bombay"));
            
cities.add(new citiesBean("NDL","New Delhi"));
        }
        else if(
idcity.equalsIgnoreCase("AU")){
            
cities.add(new citiesBean("SYD","Sydney"));
            
cities.add(new citiesBean("MEL","Melbourne"));
            
cities.add(new citiesBean("AYR","Ayres Rock"));
        }
        return 
cities;
    }