de retour JSON message de struts2 action
J'utilise jquery et struts2 dans mon application web. Maintenant, j'ai besoin d'intégrer une carte google dans ma page web et ajouter un peu de marqueur. J'utilise jquery.getJSON() la commande à envoyer la demande à struts2 action.
Dans le struts.xml
<package name="ajax" namespace="/ajax" extends="json-default">
<action name="LatLngList" class="com.test.ajax.Action" method="find">
<result type="json"></result>
</action>
</package>
Dans la page web
<script type="text/javascript">
function readLatLng() {
var latitude = new Array();
var longitude = new Array();
$.getJSON("ajax/LatLngList.action?id=9", function(data){
$.each(data, function(i,latlng){
latitude.push(latlng.latitude);
longitude.push(latlng.longitude);
});
});
}
</script>
Dans l'action, j'ai lu dans une base de données et créer une liste d'objet, puis utilisez jackson json du processeur ObjectMapper pour convertir la Liste de Chaîne JSON. Enfin, je retourne la Chaîne JSON comme valeur de retour.
public String find() throws JsonGenerationException, JsonMappingException, IOException {
List latlngList = new ArrayList();
/*
latlngList.add(...);
*/
ObjectMapper mapper = new ObjectMapper();
String str = mapper.writeValueAsString(latlngList);
System.out.println(str);
return str;
}
Quand je lance l'application web, la Chaîne JSON afficher dans la console:
[
{"latitude":37.7935697,"longitude":121.181969},
{"latitude":37.7852119,"longitude":121.1759833},
{"latitude":37.7858117,"longitude":121.1250904},
{"latitude":37.794129,"longitude":121.1229535},
{"latitude":37.7974078,"longitude":121.0874301},
{"latitude":37.8280231,"longitude":121.049312}
]
Cependant, Il me donner l'erreur.
No result defined for action com.test.ajax.Action and result [{"latitude":37.7935697,"longitude":121.181969},{"latitude":37.7852119,"longitude":121.1759833},{"latitude":37.7858117,"longitude":121.1250904},{"latitude":37.794129,"longitude":121.1229535},{"latitude":37.7974078,"longitude":121.0874301},{"latitude":37.8280231,"longitude":121.049312}]
at com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:375)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:277)
at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:176)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:263)
at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:133)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:207)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:207)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:190)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
at org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:94)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:243)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:270)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:145)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:171)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:176)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:190)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:187)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:498)
at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:291)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:680)
J'ai recherche depuis longtemps, mais ne peut toujours pas trouver la solution.
En attente de votre aide. Je vous remercie beaucoup.
OriginalL'auteur Fan Wu | 2011-09-15
Vous devez vous connecter pour publier un commentaire.
Parce que vous êtes en train de faire un mix entre regarder comme vous êtes en utilisant le JSON plugin, et directement de rendu du résultat. Sens aucun ne fonctionne. Les Actions de retourner le nom d'un résultat, pas de données brutes. (Ou, plutôt, ils peut retour des données brutes, mais doit ensuite être traitées différemment.)
Consultez la documentation du JSON plugin.
OriginalL'auteur Dave Newton
Il a été un long temps depuis que j'ai utilisé Struts2, mais de mémoire, vous n'avez pas de retour de votre réponse à partir de l'action, de vous renvoyer à une simple chaîne de caractères nom qui détermine le résultat dans le fichier de configuration à utiliser, puis les propriétés de la classe contrôleur de devenir disponible à votre vue. Lors du retour d'une
json
conséquence, ces propriétés sont sérialisés pour vous en JSON pour être retourné.Si vous voulez quelque chose de plus comme ceci:
Et puis dans votre javascript saisir le
LatLngList
de la propriété résultant de l'JSON (notez le changement dedata
àdata.latLngList
):OriginalL'auteur Alconja