Yep. No need for all of that complexity with Tapestry. I would reccomend
using the EventListener to do this. It should be a fairly simple task to
update your second combo box when the first has a value selected in it.

http://tapestry.apache.org/tapestry4.1/ajax/EventListener.html

On 8/8/06, Jani Lindqvist <[EMAIL PROTECTED]> wrote:

Hi All,

I need a combobox that populates based on the selection of other combobox.
It´s pretty simple to do in jsp, but i want to convert it to a tapestry
component that just takes 2 collection as parameters. contents of the
first
combobox and then a map of lists, with the id of the object contained in
the
first combobox as a key.

I havent used javascript in tapestry, otherwise than call some functions
that are generated using Any component.

my jsp function generates couple of arrays holding the mappings and values
and when the first combobox is changed the function is called. i think
i´ve
figured out from the documentation how to pass the name of the form and
component to the script so it can read the value that was changed but how
do
i generate the arrays?


here is an example of one function generated in the jsp

function change_combo()
{
var comboone_value = new Array();
var comboone_title = new Array();


comboone_value[0] = "51";

comboone_title[0] = "username1";

comboone_value[1] = "37";
comboone_title[1] = "username2";


var combotwo_title = new Array();
var combotwo_value = new Array();


combotwo_title[51] = new Array();
combotwo_value[51] = new Array();


    combotwo_value[51][0] = "296";
    combotwo_title[51][0] = "Customer A";

    combotwo_value[51][1] = "294";

    combotwo_title[51][1] = "Customer B";

    combotwo_value[51][2] = "297";
    combotwo_title[51][2] = "Customer C";




combotwo_title[37] = new Array();
combotwo_value[37] = new Array();



    combotwo_value[37][0] = "277";
    combotwo_title[37][0] = "Customer 1";

    combotwo_value[37][1] = "283";
    combotwo_title[37][1] = "Customer 2";

    combotwo_value[37][2] = "300";

    combotwo_title[37][2] = "Customer 3";




var combo1_selection;
combo1_selection = document.customerCall.userId[
document.customerCall.userId.selectedIndex].value;



   if (combo1_selection != 0) {


     var combo2_values = combotwo_value[combo1_selection];
     var combo2_titles = combotwo_title[combo1_selection];
    if(combo2_values == null)
    {

       document.customerCall.customerId.options[0].value = "-";

       document.customerCall.customerId.options[0].text = "-";
       document.customerCall.customerId.length = 1;
    } else
    {


    document.customerCall.customerId.length = combo2_values.length;


    for(i=0;i<combo2_values.length;i++){

          document.customerCall.customerId.options[i].value=
combo2_values[i];
          document.customerCall.customerId.options
[i].text=combo2_titles[i];
       }


       }
   }else{
       document.customerCall.customerId.options[0].value
= "-";
       document.customerCall.customerId.options[0].text =
"-";
   }
}


how do i do for loops in the script?

we´re thinking of upgrading to 4.1, is there some component that i could
use
to populate the second one with ajax, so i would be spared of this
javascript generation?




--
Jesse Kuhnert
Tacos/Tapestry, team member/developer

Open source based consulting work centered around
dojo/tapestry/tacos/hivemind.

Reply via email to