Hola,
llevo unos días intentando hacer unas pruebas con el plugin de Ajax que tiene Struts2 y no consigo resultados...
Lo que estoy intentando utilizar es el tag "autocompleter" para que me salgan diferentes opciones al poner en un campo de texto una palabra. Hasta ahora, sólo me ha funcionado si el valor devuelto por la clase JSONUser.java es un String, pero si pongo cualquier otro valor (JSONArray, JSONObject, HashMap, List, etc.) no me funciona, y me sale el error: "FATAL exception raised: [object Error]" de javascript.
He visto en los manuales que la información que debería mandarse debería tener la estructura:
[["a", "b"] , ["c", "d"]]
pero a mí no me funciona.
Os agradecería mucho si podéis echarme una mano.
Mi código es el siguiente:
------ struts.xml ------
<struts>
[...]
<package name="json-sdp" extends="json-default">
<action name="completar" class="prueba.user.JSONUser">
<result name="success" type="json" />
</action>
</package>
[...]
</struts>
------JSONUser.java ------
package com.indra.sdp.webadmin.control.user;
import java.util.*;
import java.io.OutputStreamWriter;
import com.opensymphony.xwork2.Action;
import com.indra.sdp.webadmin.model.AdminUser;
import com.indra.sdp.webadmin.dao.AdminUserDAO;
import net.sf.json.*;
public class JSONUser {
private JSONArray str3 = new JSONArray();
private JSONArray str31 = new JSONArray();
private JSONArray str32 = new JSONArray();
private JSONArray str33 = new JSONArray();
public String execute() {
str31.put("nombre");
str31.put("paco");
str32.put("nombre");
str32.put("pepe");
str3.put(str31);
str3.put(str32);
System.out.println(str3);
return Action.SUCCESS;
}
public void setStr (JSONArray str3) {
this.str3 = str3;
}
public JSONArray getStr() {
return str3;
}
}
------ index.jsp ------
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
[...]
<body>
<s:url action="list" id="descrsUrl"/>
<s:url action="completar" id="completarUrl" />
<div style="width: 300px;border-style: solid">
<p>User Data</p>
<s:form action="save" validate="true">
<s:textfield id="userId" name="user.userId" cssStyle="display:none"/>
<s:textfield id="login" label="Login" name="user.login"/>
<s:password id="passwd" label="Passwd" name="user.passwd"/>
<s:autocompleter theme="ajax" href="%{completarUrl}" showDownArrow="false" name="nombre" />
<s:submit theme="ajax" targets="users" notifyTopics="/save"/>
</s:form>
</div>
<div style="width: 300px;border-style: solid">
<div style="text-align: right;">
<s:a theme="ajax" notifyTopics="/refresh">Refresh</s:a>
</div>
<s:div id="users" theme="ajax" href="%{descrsUrl}" listenTopics="/refresh"/>
</div>
<br/>
</body>
</html>
----------------FIN DE CODIGO-------------
Muchas gracias,
un saludo.