Witam,
Mam pewien problem, chciałbym stworzyć dwie listy rozwijane w JSP, przy czym mają być one zależne od siebie. Czyli gdy z listy A wybiorę opcję 1 to lista B ogranicza mi wybór opcji. Dane będą pobierane z bazy danych. W jaki sposób można to zrealizować? Jakieś wskazówki ?
Najprosciej to dać javascriptowe eventy na wybieranie pozycji z listy i jak user coś wybierze to ładujesz z serwera zawartość do drugiej listy.
Tak już robiłem tylko jest problem w tym, że JS nie radzi sobie z pobieraniem aktualnej wartości z selecta.
Tutaj przykład:
<form>
<select id="sel" onchange="onChange()">
<option id ="opt"><%rs.getString("Jakas kolumna")%></option> //Pobranie z bazy kolumny po wczesniejszym ustaleniu połączenia
</select>
</form>
<script>
function onChange(){
var wynik = document,.getElementById("opt").text.Content; // jak dam w nawiasie "sel" zwraca całą kolumnę
alert(wynik); //zwraca pierwszy wiersz kolumny, nawet kiedy wybiorę z listy następny
}
</script>
Chodzi o wyświetlenie aktualnego wyboru z listy
Błękitny Wąż napisał(a):
Tak już robiłem tylko jest problem w tym, że JS nie radzi sobie z pobieraniem aktualnej wartości z selecta.
<form> <select id="sel" onchange="onChange()"> <option id="opt"><%rs.getString("Jakas kolumna")%></option> //Pobranie z bazy kolumny po wczesniejszym ustaleniu połączenia </select> </form> <script> function onChange(){ var wynik = document,.getElementById("opt").text.Content; // jak dam w nawiasie "sel" zwraca całą kolumnę alert(wynik); //zwraca pierwszy wiersz kolumny, nawet kiedy wybiorę z listy następny } </script> Chodzi o wyświetlenie aktualnego wyboru z listy
Tutaj przykład:
Z tej składni to nic nie odczytasz, sorry, tutaj lepiej:
<select id="sel" onchange="onChange(this.options[this.selectedIndex].value)">
//
function onChange(selectedValue){
//
}
Shalom napisał(a):
<select id="sel" onchange="onChange(this.options[this.selectedIndex].value)"> // function onChange(selectedValue){ // }
Dzięki, działa znakomicie.
Mam jeszcze problem z umieszczeniem tego wyniku wewnątrz jsp:
Czy masz pomysł w jaki sposób można by zrealizować coś takiego?
<% String result = "selectedValue lub onChange()" %>
Nie rozumiem co to dla ciebie znaczy ;]
Muszę przypisać ten wynik do zmiennej string w jsp która jest wykorzystywana później do zdefiniowania polecenia w sql
- Dlaczego w ogóle robisz to w JSP i skryptletach? Wiesz że ta technologia jest starsza od ciebie i umarła jeszcze jak sikałeś w pieluchy?
- Budowanie SQLa na podstawie wartości wysyłanej z UI przez usera brzmi jak bardzo zły pomysł i na 99% jest tam SQL Injection ;]
- Mieszasz tu zupełnie poziomy abstrakcji i kolejność wykonania. Skryptlety JSP są wykonywane po stronie serwera przed wyrenderowaniem strony podczas gdy javascript wykonuje się po stronie klienta w jego przeglądarce.
Shalom napisał(a):
- Dlaczego w ogóle robisz to w JSP i skryptletach? Wiesz że ta technologia jest starsza od ciebie i umarła jeszcze jak sikałeś w pieluchy?
- Budowanie SQLa na podstawie wartości wysyłanej z UI przez usera brzmi jak bardzo zły pomysł i na 99% jest tam SQL Injection ;]
- Mieszasz tu zupełnie poziomy abstrakcji i kolejność wykonania. Skryptlety JSP są wykonywane po stronie serwera przed wyrenderowaniem strony podczas gdy javascript wykonuje się po stronie klienta w jego przeglądarce.
Tak mi kazano więc robię, nasz klient nasz paaaaannn. XD
Rozumiem o co Ci chodzi.
To w takim razie jakie rozwiązanie byś proponował ?
Jesteś pewien że ktoś ci kazał to robić w JSP a nie np. w Sprint MVC z JSTL jako silnikiem templatów? Bo to róznica jak między krzesłem i krzesłem elektrycznym...
Jestem pewny. Jak się posypie to trudno, ale takie miałem polecenia więc wiesz..
Masz jakieś propozycje co z tym fantem zrobić ?
Tak nawiasem mówiąc, przy listach rozwijanych warto użyć value, do jednoznacznej identyfikacji opcji, którą wybieramy, zamiast posługiwać się tekstem.
<select id="sel" onchange="onChange()">
<option id ="opt" value=<%rs.getString("klucz/jednoznaczny identyfikator")% ><%rs.getString("Jakas kolumna przyjazna dla usera")%></option> //Pobranie z bazy kolumny po wczesniejszym ustaleniu połączenia
</select>
Andrzej Guziec napisał(a):
Tak nawiasem mówiąc, przy listach rozwijanych warto użyć value, do jednoznacznej identyfikacji opcji, którą wybieramy, zamiast posługiwać się tekstem.
<select id="sel" onchange="onChange()"> <option id ="opt" value=<%rs.getString("klucz/jednoznaczny identyfikator")% ><%rs.getString("Jakas kolumna przyjazna dla usera")%></option> //Pobranie z bazy kolumny po wczesniejszym ustaleniu połączenia </select>
Wiem, że tak by było lepiej ale nie mam możliwości "zakluczowania" sobie tabel.
No to faktycznie masz hardcorowe zadanie :)
Ogólnie wydaje mi się, że musisz do tego dorobić metodę w serwlecie, która jako parametr dostanie identyfikator / wartość tego value z onchenge().
Samą metodę musisz wywołać ajaxem.
No i potem ją obrobić dla drugiej opcji.
JSP faktycznie już trochę wiekowe, ale pewnie nie na jednej produkcji jeszcze działa.
Hmm.. no cóż pozostaje mi to zrobić tak jak mówisz w skryptlecie :/
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.