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]