Przypisanie wartości w Javascript do zmiennej Java i odczyt

0

Cześć, mam problem związany z przekazywaniem wartości zmiennej pomiędzy .jsp a java.

Otóż mam w formie (ReportsToHRForm.java) zmienną oraz przypisane do niej settery/gettery:

private String assignedUsersSelected[] = new String[] {};

	public String[] getAssignedUsersSelected() {
	    return assignedUsersSelected;
	}

	public void setAssignedUsersSelected(String[] assignedSalonsSelected) {
	   this.assignedUsersSelected = assignedUsersSelected;
	}

Jest ona na początku pusta. Później, jak strona jest przeklikiwana przez użytkownika, to w jsp dodaję do tej zmiennej wartości:

	<td>
	<html:select name="ReportsToHRForm" property="assignedUsersSelected" size="10" multiple="true" style="width: 150px">
		<html:optionsCollection property="assignedUsers" value="id" label="login"/>
	</html:select>
	</td>
	<td>
		<html:img page="/images/arrowRight.png" border="0" styleClass="toplink" onclick="addSelectedUsers();"/>
	</td>

Trochę Javascript

            function addSelectedUsers(){
                unassignedUsersSelected = document.getElementsByName('unassignedUsersSelected')[0];
                assignedUsersSelected = document.getElementsByName('assignedUsersSelected')[0];
                               
            alert(assignedUsersSelected);
                               
            for (i=0; i < unassignedUsersSelected.options.length; i++){
                if(unassignedUsersSelected.options[i].selected==true){
                   
                   
                   
                    var ooOption = document.createElement("OPTION");
                        assignedUsersSelected.options.add(ooOption);
                        ooOption.innerText = unassignedUsersSelected.options[i].text;
                   
                    unassignedUsersSelected.options.remove(i);
                    i--;
                }  
            }
            sort('assignedUsersSelected');
            alert(assignedUsersSelected.options[0].value);
            alert(assignedUsersSelected.options[0].text);
            }

I tu alerty krzyczą mi poprawnie, że jakieś tam wartości do assignedUsersSelected.options[0] przypisuje.

Następnie jak kliknę buttona na formie, to przechodzę do akcji w Java, gdzie odczytuję wartości z assignedUsersSelected w ten sposób:

    public Collection getSelectedUsersAsCollection() {
          ArrayList list = new ArrayList();
          if (assignedUsersSelected != null) {
              log.error(assignedUsersSelected.length);
             for (int i=0; i < assignedUsersSelected.length; i++) {
                list.add(assignedUsersSelected[i]);
             }
          }
          return list;
       }

i log mi zawsze zwraca, że w assignedUSersSelected.length jest 0... gdzie ja tu gubię te wartości? operacje w Javascript trzeba jakoś "commitować" ?

4
Badboss napisał(a):

i log mi zawsze zwraca, że w assignedUSersSelected.length jest 0... gdzie ja tu gubię te wartości? operacje w Javascript trzeba jakoś "commitować" ?

Tak, nazywa się to ajax

2

@Badboss ale wiesz, że z poziomu przeglądarki nie masz dostępu do Javowych kolekcji, które są przecież na backendzie? :)

4

o_O

  1. JSP w roku 2021...
  2. Tak, o tym co JS robi w przeglądarce backend NIC nie wie, dopóki ten JS nie wyśle jakiegoś requestu, albo nie przekaże tych informacji w jakiś inny sposób.
0

Dzięki za podpowiedź, właśnie tego mi trzeba było, działa :)

Nie ma co się stresować, technologia stara, bo taką wymaga klient, a mi trochę wiedzy brakuje, więc dopytuję o głupoty. Ale wasze podpowiedzi dały mi 100% szansy na pójście dalej. Jeszcze raz dzięki :)

Edit:
Rozwiązanie

			function selectAllUsers(){
					var form = document.forms[0];
					result="";
					count=form.elements['assignedUsersSelected'].length;
					i=0;
					while (i<count)
					{
						if (result == "")
						result=form.elements['assignedUsersSelected'].options[i].value;
						else
						result=result + "," + form.elements['assignedUsersSelected'].options[i].value;
						i++;
					}
					var url = "searchObjectsToOF.do?assignedUsersSelected=";
					url+= result ;
					form.action = url;
					form.submit();
				}

@Źródło: https://www.developpez.net/forums/d13940/java/developpement-web-java/frameworks-web/struts-1/struts-html-optionscollection-r-cup-ration-donn-es/

I dalej obsługa poprzez request.getParameter("assignedUsersSelected");

1 użytkowników online, w tym zalogowanych: 0, gości: 1