Hi Jeromy,

Many thanks for your response!

Jeromy Evans wrote:
I don't use dojo's autocompleter myself, but after a quick look at the javascript source for the widget (ComboBox) I can see there's a public method setSelectedValue(value) which may help, although it's not clear to me which component of the ComboBox is updated....The js source is pretty horrible.
By doing detective work on the scattered documentation finally found a working solution! might not be the most beautiful one but works for me. It is not the most beautiful one because the target Ajax Action returns only one value so I had to hardcode the key to be e.g. "value" and by knowing this key in the action and in the javascript then I use the autocompleter setSelectedKey("value") and then it displays it properly. I also hide the fact that the text field is an autocompleter by using the showDownArrow="false".

For the records please find all the  relevant sources below.

Many thanks!

Best regards,
Giovanni

Setup:

Struts 2.1.1 built from sources recently approx 25.11.2007
JSON plugin 0.19

Example request/response:
Request:
AjaxGetExchangeRates.action?historicBook0Key=AZN%20GB.GBP.LON.1.00.stock&historicBook1Key=AZN%20GB.GBP.LON.1.00.stock
Response:
{"eurosPerListedUnit0":{"1.393":"value"},"eurosPerListedUnit1":{"1.393":"value"}}

**************************** struts.xml *******************************

<package name="ajax" extends="json-default">
<action name="Ajax*" class="com.sag.optimizer.ui.web.action.ajax.Ajax{1}Action">
     <result type="json" />
  </action>
</package>

**************************** AjaxGetExchangeRatesAction ***************

public
class AjaxGetExchangeRatesAction
extends ActionSupport
{
//------------------------------------------------------------------------
   // public
//------------------------------------------------------------------------
   /**
    * @return the eurosPerListedUnit0
    */
   public final Map<String, String>
   getEurosPerListedUnit0()
   {
       Map<String, String> myMap = new HashMap<String, String>();
myMap.put(String.valueOf(calculateExchangeRate(theHistoricBook0Key)), "value"); return myMap;
   }

//------------------------------------------------------------------------
   /**
    * @param aHistoricBook0Key the historicBook0Key to set
    */
   public final void
   setHistoricBook0Key(String aHistoricBook0Key)
   {
       theHistoricBook0Key = aHistoricBook0Key;
   }

//------------------------------------------------------------------------
   /**
    * @return the eurosPerListedUnit1
    */
   public final Map<String, String>
   getEurosPerListedUnit1()
   {
       Map<String, String> myMap = new HashMap<String, String>();
myMap.put(String.valueOf(calculateExchangeRate(theHistoricBook1Key)), "value"); return myMap;
   }

//------------------------------------------------------------------------
   /**
    * @param aHistoricBook1Key the historicBook1Key to set
    */
   public final void
   setHistoricBook1Key(String aHistoricBook1Key)
   {
       theHistoricBook1Key = aHistoricBook1Key;
   }

//------------------------------------------------------------------------
   // private
//------------------------------------------------------------------------
   private double
   calculateExchangeRate(String aHistoricBookKey)
{ ... } //------------------------------------------------------------------------
   // members
//------------------------------------------------------------------------
   private String theHistoricBook0Key;
   private String theHistoricBook1Key;
private static final long serialVersionUID = 1L;
}

**************************** mypage.jsp ******************************

<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<%@ taglib prefix="sx" uri="/struts-dojo-tags" %>

<script type="text/javascript">
dojo.event.topic.subscribe("/afterExchangeRateReloaded", function(data, request, widget)
 {
    //data : text returned from request
    //request: XMLHttpRequest object
    //widget: widget that published the topic
    widget.setSelectedKey("value");
}); </script>

<s:url var="exchangeRates" action="AjaxGetExchangeRates.action" />

<s:form id="formSimulation" action="%{targetAction}" method="post" theme="%{currentTheme}">
   ...
<sx:autocompleter tooltip="Provide the first Historic Book" valueNotifyTopics="/changedHistoricBook0" searchType="substring" label="Historic Book 1" cssStyle="width: 250px;" dropdownHeight="180" name="historicBook0" list="historicBooks" listKey="id" listValue="name" /> <sx:autocompleter tooltip="Provide the second Historic Book" valueNotifyTopics="/changedHistoricBook1" searchType="substring" label="Historic Book 2" cssStyle="width: 250px;" dropdownHeight="180" name="historicBook1" list="historicBooks" listKey="id" listValue="name" />
   ...
<sx:autocompleter id="eurosPerListedUnit0" tooltip="Provide the Currency Rate 1" formId="formSimulation" showDownArrow="false" cssStyle="width: 250px;" href="%{#exchangeRates}" listenTopics="/changedHistoricBook0" label="Currency Rate 1" name="eurosPerListedUnit0" autoComplete="false" afterNotifyTopics="/afterExchangeRateReloaded" /> <sx:autocompleter id="eurosPerListedUnit1" tooltip="Provide the Currency Rate 2" formId="formSimulation" showDownArrow="false" cssStyle="width: 250px;" href="%{#exchangeRates}" listenTopics="/changedHistoricBook1" label="Currency Rate 2" name="eurosPerListedUnit1" autoComplete="false" afterNotifyTopics="/afterExchangeRateReloaded" /> <s:submit value="%{buttonLabel}" align="center"/>
</s:form>




---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to