hi,

I have the following use-case -I think should be pretty common- and would like to
know what would be the best design choice:

- There is a form that contains an autocompleter field filled with all stock indexes. - In the same form there are other dependent input values displayed e.g. exchange
 rate that correspond to the selected index.
- Initially the input action makes sure the dependent fields are correctly populated
 i.e. they match the initially selected index.

Now when the user changes the index selection, some of the form fields
must also be updated to be consistent with the new selection.

These are the two design choices I have found using ajax so far:

1-. Have the master field index publish a topic and have the dependent fields listen to that topic and trigger the execution of an action. The problem I encountered
    here is that:
a) The request parameters e.g. historicBook0 are empty, don't know how to push them to the action, I could use javascript directly to encode it but not sure if this could lead to race conditions i.e. how will the javascript ensure to execute
            before the topic publication triggers execution of the action.
b) The widget autocompleter seem not to understand the result of the action. I tried using the json plugin and having a getter of the action match the widget name but
             does not work ...

Below find the not working sources with the problems described above.

2-. The second choice is using JSON RPC with javascript directly but this approach
though viable seems rather frameworkless i.e. hacky to me.

My gut feeling is that solution #1 is the one but just don't know how to solve those
issues.

TIA,
regards,
Giovanni

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

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

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

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

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

<s:form id="formAngleAlgoConfSimulation" 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 Currency Rate 1" href="%{#exchangeRates}" autoComplete="false" preload="false" listenTopics="/changedHistoricBook0" label="Currency Rate 1" showDownArrow="false" cssStyle="width: 250px;" name="eurosPerListedUnit0" />
   ...
   <s:submit value="%{buttonLabel}" align="center"/>
</s:form>

*********** Action ***************************

/**
* Determines the exchange rates for a Historic book pair
*/
public
class RemoteExchangeRatesAction
extends ActionSupport
{
//------------------------------------------------------------------------
   // public
//------------------------------------------------------------------------
   /**
    * @return the eurosPerListedUnit0
    */
   public final double
   getEurosPerListedUnit0()
   {
        return calculateFxRate(theHistoricBook0Key);
   }

//------------------------------------------------------------------------
   /**
    * @return the eurosPerListedUnit1
    */
   public final double
   getEurosPerListedUnit1()
{ return calculateFxRate(theHistoricBook1Key);
   }

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

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


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

Reply via email to