Estoy tratando de verificar si el nombre de usuario está disponible o no cuando un usuario intenta crear su cuenta. cuando un usuario escribe su nombre de usuario, debe haber una verificación instantánea de si el nombre de usuario está disponible o no y mostrará un mensaje justo debajo del cuadro de nombre de usuario.
Intenté lograrlo llamando a un Ajax pero no pude entender qué devolver básicamente y cómo funcionará, en realidad soy muy nuevo en Struts 2, puedo verificar el nombre de usuario pero no sabía qué devolver.
Mi llamada Ajax
<script> $(document).ready(function () { $("input").blur(function () { var input = $(this).val(); alert(input); $.ajax({ url:'checkUsername', method:"POST", data:{username:input}, success:function(data) { if(data!='0'){ $('#availability').html('<span>not available</span>') $('#update').attr("disabled",true); } else{ $('#availability').html('<span>available</span>') $('#update').attr("disabled",false); } } }) }); }); </script>
acción checkUsername
public String checkUsername() { try { setCtr(admin.checkUsername(username)); if (ctr > 0) { System.out.println(ctr); setNoData(false); } else { setNoData(true); } } catch (Exception e) { e.printStackTrace(); } return "CHECKUSER"; }
método para verificar el nombre de usuario en dao
public int checkUsername(String username) throws Exception { ResultSet rs = null; Connection con = null; try { con = ConnectionManager.getConnection(); System.out.println(username); String sql = "SELECT * FROM userinfo WHERE username =?"; PreparedStatement ps = con.prepareStatement(sql); ps.setString(1, username); rs = ps.executeQuery(); if (rs.next()) { return 1; } } catch (Exception e) { e.printStackTrace(); } finally { if (con != null) { con.close(); } } return 0; } }
Este método en dao puede verificar el nombre de usuario, pero qué devolver en esos datos ajax que estoy tratando de verificar si las filas> 0 deberían imprimirse no disponibles. ¿Cómo devolver y cómo comprobar?
puntales.xml
<action name="checkUsername" class="com.redress.actions.AdminAction" method = "checkUsername"> </action>
¿Alguien puede corregirme, cómo lograr esto?
Simplemente devuelva un resultado json
. Debe definirlo en la configuración de acción. Ya expliqué cómo puede devolver un resultado json sin struts2-json-plugin . Ahora lo usará para devolver un objeto JSON a la función de devolución de llamada exitosa a través de jQuery ajax.
Primero debe agregarlo a la ruta de compilación del proyecto. Luego haga el paquete de su configuración de acción para extender el paquete json-default
. Agregará el tipo de resultado JSON a la configuración de Struts.
Haga que la propiedad noData
(lo que sea) a la que desee acceder tenga getter y setter.
Agregue el resultado de tipo JSON a la configuración de la acción.
<action name="checkUsername" class="com.redress.actions.AdminAction" method get = "checkUsername"> <result type="json"> <param name="root">action</param> </result> </action>
El método de acción debe devolver el código de resultado ActionSupport.SUCCESS
.
En la función de devolución de llamada exitosa, debe obtener el objeto JSON que puede verificar
ActionSupport.Success:function(data){ if(!data.noData){ $('#availability').html('<span>not available</span>'); $('#update').attr("disabled",true); } else{ $('#availability').html('<span>available</span>'); $('#update').attr("disabled",false); } }