struts-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Giovanni Azua <g...@imc.nl>
Subject Resolved! about linking two autocompleters using topics
Date Tue, 04 Dec 2007 11:41:14 GMT
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: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org


Mime
View raw message