views:

2121

answers:

9

Hi all

the problem I have is that I have two sets of values in a drop down list. If type 'A' is selected I want a text box to be populated with a value from the database and be read only. If Type 'B' is selected the box is to be empty and editable.

My original code is written in jsp/struts and I have sort of achieved this by using

onchange="javascript:submit()" to reload the page, but this has the obvious drawback of saving any changes you have made which means you can't really cancel.

I also have other problems with the serverside validation due to this method.

Is there a way of making a jsp page reload on change, that way I could write javascript to change the way the page looks according to the values held in the session. That way the save/submit funtion will only be called when the page has properly been filled out and the server side validation will work as designed.

I know that this is something that AJAX is good at doing but I am trying to avoid it if possible.

M

+1  A: 

AJAX is your only other option my friend, unless on the original page load you load all the other possible values of the Text Box so you don't need to go back to the database. Well, you could try putting the text box in an IFRAME, but you will probably run into more problems with that approach than just going with AJAX.

Mike Pone
A: 

Without AJAX what you are asking is going to be difficult. Another option (which is ugly) is to write out all possible values for the second list box into a data structure like an array or dictionary.

Then write some javascript to get the values from the data structure when the user selects from the first list box. The amount of javascript you will have to write to get this done and to do it correctly in a cross browser way will be much more difficult than simply using AJAX.

Vincent Ramdhanie
A: 

Not sure why you'd try to avoid AJAX in today's world, the JS libraries out there today make it so simple it's crazy not to try it out.

I just had to replace a page that was written as Vincent pointed out. I assume at the time it made sense for the app, given the relative size of the data 4 years ago. Now that the app has scaled though, the page was taking upwards of 30 seconds to parse the data structures repeatedly (poorly written JS? maybe).

I replaced all the logic with a very simple AJAX call to a servlet that simply returns a JSON response of values for the 2nd drop down based on what was passed to it and the response is basically instant.

Good luck to ya.

discgolfer
A: 

One way is to change the form's action so that you submit the form to a different url than the "save" url. This lets you reload certain aspects of the form and return to the form itself, instead of committing the data.

<script>
  function reload() {
    document.forms[0].action="reloadFormData.jsp";
    document.forms[0].submit();
  }
</script>
<form action="saveData.jsp" method="post">
  <select id="A" name="B" onchange="reload()"><!-- blah --></select>
  <select id="B" name="B"><!-- blah B --></select>
  <input type="submit">
</form>
Mr. Shiny and New
A: 

I know a taglib that can fit to your problem: AjaxTags. I use this taglib in my J2EE projects and it is very simple to integrate it into web applications.

This taglib give you several tags designed to execute AJAX request in your jsp files.

Here is the description of each tags: http://ajaxtags.sourceforge.net/usage.html

The tag which will help you is the ajax:select tag. It allows you to populate a select tag which depends on an other field without reloading the entire jsp page.

If you more informations about it, ask me and i'll try to answer quicky.

Fred
A: 

not use for me

And what was that supposed to mean?
Stein G. Strindhaug
A: 

If I understand you correctly, that you want either a dropdown (<select>) or a textfield (<input type="text">) depending on a choice (typically a checkbox or radiobuttons) somewhere above in a form?

I that case you may need to handle the two types of input differently on the server anyway, so why not have both the selectbox and textfield in the area of the form with different names and id and one of them hidden (display = none). Then toggle visibility when the choice changes. On the server you pick eiter the selectbox or textarea input (wich will both be present unless you disable (disabled="disabled") them too, wich I think is uneccesary) depending on the choice input.

Of course if you expect that the user usually just need the text-input, and a few times only, needing a massive list; it would be better to use ajax to retrieve the list. But if it's the other way around (you need the text-field only occationally), as I assumed above, it will be faster to have both present in the initial form.

If the drop down only contain easily generateable data, like years from now to houndreds of years back it could even be much faster (requiring less bandwidth on the server) to generate the data client side using a for loop in Javascript.

Stein G. Strindhaug
A: 

Along the lines of what Strindhaug said, but if you need dynamic data:

Could you have the backend write JS into the page, and then the JS would change the form as required? The backend could propagate some variables for descriptions and such, and then the JS could change/update the form accordingly. If you aren't familiar with this, libs like jQuery make things like this easier and more cross-browser than rolling-your-own (at least in my experience).

Aside: If you're not using AJAX because it was hard to code (as I didn't for a while because my first experience was from scratch and wasn't pretty), as others have said, libs like MooTools and such make it really easy now. Also, there is not shame in using AJAX properly. It has a bad rap because people do stupid things with it, but if you can't simply write premade values into the form or you have to do live look ups, this is one of AJAX's proper uses.

jimktrains
A: 

No idea on it.. Sorry

Ragavendran
Still no idea on it
Ragavendran