Jeromy, Again, thanks for the reply. I appreciate your help!
Following your example below, I can see the JSON result in the app server console when the action called, but I get the following error in the browser: FATAL exception raised: TypeError: Value undefined (result of expression this.data[x][0].toLowerCase) is not object. What is this telling me? -- my Struts mapping: <package name="search" extends="json-default" namespace="/search"> <action name="searchByText" class="...QuestionSearchAction"> <result name="success" type="json"> <param name="root">list</param> </result> </action> </package> -- My Form: <s:url id="search" namespace="/search" value="/searchByText.action" /> <s:autocompleter theme="ajax" href="%{search}" name="text" loadOnTextChange="true" loadMinimumCount="3"/> -- My Action: public class QuestionSearchAction extends BaseAction { /** * */ private static final long serialVersionUID = 1127012585409657094L; Question[] list; private QuestionService questionService; public void setQuestionService(QuestionService questionService) { this.questionService = questionService; } public String execute() { List<Question> all= questionService.getQuestions(); list= all.toArray( new Question[all.size()]); return SUCCESS; } public Question[] getList(){ return list; } } Cheers! mg -----Original Message----- From: Jeromy Evans [mailto:[EMAIL PROTECTED] Sent: Saturday, February 02, 2008 6:15 PM To: Struts Users Mailing List Subject: Re: AjaxTag 1.3 support? I completely agree with Dave so I'll take a different tact. Based on this example: http://struts.apache.org/2.0.11/docs/ajax-tags.html#AjaxTags-autocomplet erTag, I would also take the approach of returning a JSON Result via the JSON Plugin. Only the configuration changes for an XML result. So, my form looks like this: <s:url id="json" value="/JSONList.action" /> <s:autocompleter theme="ajax" href="%{json}" dropdownHeight="180"/> So, my struts.xml contains the corresponding action definition with a JSON result: <package name="example" extends="json-default"> <action name="JSONList" class="package.ListAction"> <result name="success" type="json"> <param name="root">list</param> </result> </action> </package> And my action method looks like this: private ACEntry[] list; public String execute() { list = populateList() return "success"; } public ACEntry[] getList() { return list; } --- In summary, the autocompleter does a get to /JSONList.action Struts2 executes the execute method of ListAction The execute method creates a structure that will populate the autocompleter The action returns a JSON result type The JSON plugin converts the root object (the list property only rather than the whole action) to a JSON structure The JSON plugin returns the application/json content to the autocompleter I'll leave it to you to determine what the list structure should like like. As it'll probably be re-use I'd create a bean for the purpose. Use the FireBug plugin for firefox to inspect the format of the JSON result to ensure it matches the format required by the javascript library (or even better, write a unit test). This will work with any javascript library that accepts JSON - you just have to provide an appropriate structure. It will also work with any library that requires an XML response, except you'd use an XML result type like I previously described in this thread. I hope that helps. Struts2 is really well suited at providing non-html responses if you take the time to understand the ResultType architecture. cheers, Jeromy Evans Dave Newton wrote: > --- "Griffith, Michael *" <[EMAIL PROTECTED]> wrote: > >> Thanks for the comprehensive reply. Looking at the documentation and the >> example app, I am still not sure how to configure my action/response. I >> am using tiles 2. >> > > As previously stated if you are writing directly to the response you need to > return null from the action. I am still not sure why you're using a tile > definition here. > > > >> It seems I need to return my result in JSON format correct? By returning >> a JSON String from the action, how to I configure my response? >> > > As Jeremy said this is, however, probably a bad idea, considering that the > same outcome can be achieved in several different ways. > > Using a JSON result will serialize your action to JSON automagically. You'd > use a "json" result (via the JSON plugin), not a tile. Or you could build the > JSON manually and configure a FreeMarker result. > > >> If I use the tiles response type, I get a dojo parsing error because the >> whole page is returned from the reply. >> > > Sure. > > >> The example in the example app isn't very clear to me, as the action >> returns a .JS file with the result hard coded, and not using any >> template like tiles I might add. >> > > What example are you referring to? > > http://struts.apache.org/2.0.11/docs/ajax-tags.html#AjaxTags-autocomplet erTag? > > When making an Ajax request for a component like <s:autocompleter.../> it's > unlikely you'd want to return anything other than JSON. (Other components or > component libraries may want other formats like XML or whatever.) Unless your > tile definition is creating JSON it's not going to work, and it's unlikely > that would be the best way to generate the JSON anyway. > > >> Also, I think I found a bug? -- the namespace attribute seems to be >> ignored when I pass href=%{search} to the autocompleter. I had to put >> qualify the namespace in the value to get the correct action to be >> invoked. >> > > When you configure the package does your namespace have a leading "/" (slash) > character? If it doesn't this can lead to dispatching issues. > > Dave > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > > > > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]