2

I'm having some problem with Json. I want to send a json object to a database on a server and in return get a json result. I'm working with KnockoutJS, jQuery and struts-2.

This is javascript code:

function(ko, dataservice, config, router, messenger, Utente, Vario) {
    var
            logger = config.logger,
            utente = new Utente(),
            vario = new Vario(),
            isValid = ko.computed(function() {
        return utente.username() && utente.password() && utente.email();
    }),
            activate = function(routeData, callback) {
    },
            registrazione = function() {
        if (isValid()) {
            if (utente.password() === vario.password()) {

                dataservice.servizisegreteria.registrazione({
                    success: function(result) {
                        if (result.esito === 'OK') {
                            router.navigateTo(config.hashes.registrazione);
                            logger.info("Controlla la tua casella mail!");
                        }
                        else {
                            logger.error("Salvataggio non riuscito!");
                        }

                    },
                    error: function(result) {
                        logger.error("Controllare che i dati siano giusti!");
                    }


                }, $.toJSON({
                    'utente': {
                        'username': utente.username(),
                        'password': utente.password(),
                        'email': utente.email(),
                        'dataIscrizione': new Date()
                    }
                }));


            }

            else
                logger.error("Le Password devono combaciare!");
        }
        else
            logger.error("Inserire tutti i  dati!");
    };


    return {
        activate: activate,
        utente: utente,
        vario: vario,
        registrazione: registrazione
    };
}

This is code for ajax request:

var init = function() {
        amplify.request.define('registrazione', 'ajax', {
            url: '/VenditaGioielli/gestioneSegreteria/nuovoUtente.action',
            dataType: 'json',
            type: 'POST',
            contentType: 'application/json; charset=utf-8'
        });
    },

            registrazione = function(callback, data) {
        return amplify.request({
            resourceId: 'registrazione',
            data: data,
            success: callback.success,
            error: callback.error
        });
    },

    init();

    return {   
        registrazione: registrazione

    }
}

This is html code:

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags" %>
<script type="text/javascript"> 
</script>
<section id="registrazione-view" class="view">
<div id="container">

    <div id="contenuto">
        <div class="formGioiello">  

            <div class="gruppoInput">

                <div>
                    <label>Username</label>
                    <input type="text" placeholder="Username" data-bind="value: utente.username"  required/>  
                </div> 
                <div>
                    <label>Password</label>
                    <input type="password" placeholder="Password" data-bind=" value : utente.password" required/>
                </div>
                <div>
                    <label>Ripeti Password</label>
                    <input type="password" placeholder="Ripeti Password" data-bind="value :vario.password" required/>
                </div>
                <div>
                    <label>Email</label>
                    <input type="email" placeholder="Email" data-bind="value :utente.email" required/>
                </div>
            </div>
            <div>
                <button data-bind="click: registrazione, jqueryui: 'button'">Registrati!</button>
            </div>
        </div> 

    </div>
</div>

this is struts.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
<constant name="struts.devMode" value="true" />
<package name="segreteria" namespace="/gestioneSegreteria" extends="json-default">

    <interceptors>
        <interceptor name="segreteriainterceptor" class="it.lt.venditagioielli.gestioneSegreteria.web.GestioneSegreteriaInterceptor" />
        <interceptor-stack name="gestionesegreteriastack" >
            <interceptor-ref name="servletConfig"/>
            <interceptor-ref name="segreteriainterceptor"/>
        </interceptor-stack>     
    </interceptors>
    <default-interceptor-ref name="gestionesegreteriastack"/>

    <global-results>
        <result name="nonloggato" type="redirect">/index.jsp</result>
    </global-results>

    <action name="nuovoUtente" class="it.lt.venditagioielli.gestioneSegreteria.web.GestioneUtenteAction" method="inserisci">
        <interceptor-ref name="json">
            <param name="contentType">application/json</param>
        </interceptor-ref>
        <interceptor-ref name="gestionesegreteriastack" />
        <result type="json">
            <param name="root">esito</param>
        </result>
        </action>
    </package>
</struts>

And this is the action code:

  package it.lt.venditagioielli.gestioneSegreteria.web;

  import com.opensymphony.xwork2.Action;
  import it.lt.venditagioielli.gestione.model.Esito;
  import it.lt.venditagioielli.gestione.model.Utente;
  import it.lt.venditagioielli.gestioneSegreteria.servizi.ServiziSegreteria;

  public class GestioneUtenteAction {
    private Utente utente = new Utente();
    private Esito esito = new Esito();
    private ServiziSegreteria serviziSegreteria;
    private String idUtente;

    public String inserisci() {
        try {
            serviziSegreteria.inserisciNuovoUtente(utente);
            serviziSegreteria.inviaMailConferma(utente);
            esito.setEsito("OK");
        } catch (Exception ex) {
            esito.setEsito("KO");
        }

        return Action.SUCCESS;
    }

    public Esito getEsito() {
        return esito;
    }

    public void setEsito(Esito esito) {
        this.esito = esito;
    }

    public Utente getUtente() {
        return utente;
    }

    public void setUtente(Utente utente) {
        this.utente = utente;
    }

    public void setServiziSegreteria(ServiziSegreteria serviziSegreteria) {
        this.serviziSegreteria = serviziSegreteria;
    }
    public String getIdUtente() {
        return idUtente;
    }

    public void setIdUtente(String idUtente) {
        this.idUtente = idUtente;
    }
  }

I'm getting this error while getting data from database:

JSON.parse: unexpected character error

in fact, netbeans doesn't even get to the GestioneUtenteAction class on debug mode!

The json object sent is

{"utente":{"username":"luca","password":"l","email":"ho@ho.it","dataIscrizione":"2013-11-04T13:30:09.575Z"}}

Does anyone have a clue how to fix this?

EDIT: the action isn't hit, and the answer from the server is my html page, instead of a json object. This html is given to the parseJSON function of jquery. I came to this result by comparison whit another working action

4

0 回答 0