Как да изпратя Javascript променлива към страната на сървъра?

Трябва да добавя елементи към съществуващ код, но не знам всички установени модели. Трябва да извлека стойност от числово поле в javascript, да я съхраня в променлива на JSP таг и да я изпратя на Java метод. Знам, че javascript е от страна на клиента и Java от страна на сървъра.

Това е числово поле "ЗОНА", чиято стойност трябва да бъде възстановена за цикъл

Добавеният код е вход "ZONE", бутонът за действие "ADD_ELEMENT_LISTE_OUVERTE_1" и променливата и цикъл "zone".

Благодаря !

Код от страна на JSP:

<popo:form>

    <div class="left">
    nombre de colonnes <input type="number" id="zone"  name="zone" class="text" maxlength="25" valeur="" />
    </div>
    <div class="right">
        <%controller.getContext().getInteger(ListeOuverteContributionDetailController.ZONE) =%>

        <script type="text/javascript">
            function getZoneJS() {
                var zone=(parseInt(document.form.elements["zone"].value));
                if (zone != null ){
                    return zone;
                }                                        
            }
        </script>

        <popo:action name="ADD_ELEMENT_LISTE_OUVERTE_1" text="Ajouter les colonnes" />                                
    </div>

    <popo:listpanel dtcid="<%=ListeOuverteContributionDetailController.DTC_ELEMENTS_LISTE_OUVERTE%>" readonly="false">

        <popo:grid cols="2" colwidth="200px,*">
            <popo:iterator>
                <popo:field name="VALEUR"/>
                <popo:action name="DELETE_ELEMENT_LISTE_OUVERTE" text="<%=controller.getTextSupprimer()%>" style="icon"/>
            </popo:iterator>
        </popo:grid>
    </popo:listpanel>

    <div class="left">
        <popo:action name="ADD_ELEMENT_LISTE_OUVERTE" text="Ajouter un élément"/>   
    </div>
    <div class="left">
        <%--<popo:link address="<%=AddressItems.IMPORT_LISTE_OUVERTE_ADDRESS.getAddress()%>" fields="CHAMP_ID" objects="<%="FOR_ID," + controller.getChampKey(champId)+","+controller.DTC_ELEMENTS_LISTE_OUVERTE%>" style="button">Importer</popo:link>--%>
        <popo:action name="IMPORT_LISTE_OUVERTE" text="Importer"/>
    </div>
    <div class="left">
        <popo:action name="EXPORT_LISTE_OUVERTE" text="Exporter" /> 
    </div>
    <div class="clear"></div>

    <div class="buttonbar">
        <div class="left">
            <popo:link address="<%=AddressItems.SECTION_CONTRIBUTION_DETAIL_ADDRESS.getAddress()%>" fields="SEC_ID" objects="FOR_ID" params="<%="MODE=" + DetailController.MODE_EDIT%>" style="button" confirm="<%=Constantes.MSG_CONFIRM_QUITTER_ECRAN_CREATION_MAJ%>">Abandonner</popo:link>
        </div>
        <div class="right">
            <popo:action name="SAVE_MODIFICATIONS_LISTE_OUVERTE" text="Enregistrer" isdefaultaction="true"/>
        </div>
    </div>
</popo:form>

Java метод, който ще извлече променливата ZONE за цикъл

public class ListeOuverteContributionDetailController extends AbstractContributionController {

    /**
     * Liste des éléments de la liste ouverte.
     */
    public static final String DTC_ELEMENTS_LISTE_OUVERTE = "DTC_ELEMENTS_LISTE_OUVERTE";
    public static final String SI_AJOUT_ELEMENT = "SI_AJOUT_ELEMENT";
    public static final String ZONE = "ZONE";

    public Message executeAddElementListeOuverte1() throws KUserException, KSystemException {

        final DtCollection<ElementListeOuverte> elementsListeOuverte = getContext().<ElementListeOuverte>getDtCollectionInput(DTC_ELEMENTS_LISTE_OUVERTE).validate();
        // la valeur zone qui doit être récupérée de la JSP
        final int zone = Integer.parseInt(getContext().getString(ZONE));
        for (int i = 1; i <= zone; i++) {
            // On ajoute un élément à la liste des éléments stockée dans le contexte en le flagant "Nouveau"
            final ElementListeOuverte elementListeOuverte = new ElementListeOuverte();
            final ChampContribution champ = getContext().<ChampContribution>getDtObjectInput(getChampKey(getContext().getLong(CHAMP_ID))).validate();
            elementListeOuverte.setChampId(champ.getChampId());
            elementListeOuverte.setSiNouveau(true);
            elementListeOuverte.setSiSupprime(false);
            elementsListeOuverte.add(elementListeOuverte);

            getContext().put(SI_AJOUT_ELEMENT, true);
        }
        return refresh();
    }
}

person frexville    schedule 16.01.2012    source източник
comment
Веднъж във въпроса има твърде много код... Във всеки случай не можете да предавате стойности от JavaScript към JSP към Java (това е обратното), това, което можете< /i> do е да направите Ajax повикване от JavaScript.   -  person Viruzzo    schedule 16.01.2012
comment
Съжалявам за целия код, защото исках да обясня, че може да има проблем. Ще го редактирам. От страна на JSP успях да получа стойност на елемента с JS функцията getZoneJS(). Сега искам да го задам в променлива и да го изпратя на java метода. Не мисля, че AJAX ще ми помогне повече.   -  person frexville    schedule 16.01.2012


Отговори (1)


Задайте го като стойност на скрито поле за въвеждане, което е оградено във формуляра, който искате да изпратите.

Тъй като нямам представа какво представляват/генерират тези <popo:xxx> тагове, те изглежда са част от персонализирана библиотека с тагове, не мога да дам подходящ отговор. Но в крайна сметка трябва да изглежда така:

<form ...>
    ...
    <input type="hidden" id="foo" name="foo" />
</form>

които можете да зададете, както следва от JS:

document.getElementById("foo").value = yourNewValue;

той ще бъде достъпен като параметър на заявка от страната на сървъра по обичайния начин, след като формулярът бъде изпратен:

String foo = request.getParameter("foo");
person BalusC    schedule 16.01.2012
comment
‹popo:xxx› е персонализирана библиотека с етикети. Получавам iput стойностите като var zone=(parseInt(document.form.elements[zone].value)); и искам да го задам на променлива JSP и да го използвам в контекста на моя java метод. - person frexville; 16.01.2012
comment
Да, вече се досетих. Не разпознавам това име като една от съществуващите и добре познати библиотеки с етикети. Ако това е персонализирана библиотека, може да не очаквате поддръжка 1:1, защото никой друг не е запознат с нея. Поне публикувах отговор, който показва как да го направя в стандартен JSP/JS/Servlet, така че да можете да приложите научените уроци във вашата персонализирана библиотека с етикети. Ако изобщо не разбирате отговора ми, той просто спира до тук. - person BalusC; 16.01.2012
comment
@frexville потърсете някакъв hidden input подобен контрол във вашия инструментариум и съответно променете горния код. - person Apurv; 08.02.2012