2012-04-11 12 views
0

Ich erstelle eine GUI mit Dojo-Schieberegler. Neben dem Schieberegler befindet sich ein Textfeld, in dem der aktuelle Wert des Schiebereglers angezeigt wird.Übergabe des Arguments der JavaScript-Funktion an Java-Code

Ich möchte, dass jedes Mal, wenn der Schieberegler verschoben wird, der aktuelle Wert des Schiebereglers im Textfeld angezeigt wird. Als nächstes wird dieser Wert in der weiteren Berechnung verwendet und das Ergebnis wird in einer anderen Textbox angezeigt.

Was ich gemacht habe, ist: Innerhalb des Dojo-Sliders rufe ich eine JavaScript-Funktion auf, die den aktuellen Wert des Sliders übergibt.

Innerhalb der JavaScript-Funktion möchte ich das Argument der Funktion in einen Java-Code innerhalb der Funktion übergeben. Das Argument wird vom Java-Code verwendet, um eine Berechnung durchzuführen.

Mein Problem ist, dass ich das Argument nicht an den Java-Code übergeben konnte. Meine Frage ist, wie kann ich das tun?

Unten ist die Codierung habe ich geschrieben:

<head> 
<script type="text/javascript"> 
dojo.require("dijit.form.Slider"); 
dojo.require("dijit.form.TextBox"); 

dojo.ready(function(){ 
var slider = new dijit.form.HorizontalSlider({ 
name: "slider", 
value: dojo.byId("walluvalueinit").value, 
minimum: 0,  
maximum: 1,  
discreteValues:11, 
intermediateChanges: true, 
style: "width:300px;", 
onChange: function(value){ 
    dojo.byId("walluvalue").value = value; 
    changewalluvalue(value); //CALLING FUNCTION changewalluvalue() 
} 
}, "slider"); 
}); 

</script> 
</head> 

<body class="claro"> 
<jsp:useBean id="beanAnalysis" class="bean.Analysis" scope="application"/> 

<script> 
function changewalluvalue(value){ 
<% 
ExteriorUnheatedGroundLossCalculation eug = new ExteriorUnheatedGroundLossCalculation(); 

    //MORE CALCULATIONS 
    //SET U VALUES PROPERTY IN ExteriorUnheatedGroundLossCalculation 
    eug.setWallUValue(value); //THE ARGUMENT "value" SHOULD BE PASSED HERE 

====more java code===== 
%> 
} 
</script> 

<form id="form1" name="form1" method="post" action=""> 
<tr> 
    <td width="150">Wall U Value</td> 
    <td width="411" align="center" valign="middle"><div id="slider"></div></td> 
    <td width="154" align="center" valign="middle"><label for="walluvalueinit"></label> 
     <input type="text" name="walluvalueinit" id="walluvalueinit" value="${beanAnalysis.wallUValue}"/></td> 
    <td width="152" align="center" valign="middle"><label for="walluvalue"></label> 
     <input type="text" name="walluvalue" id="walluvalue" /></td> 
</tr> 

<td colspan="2" align="center">Transmission Loss</td> 
    <td align="center" valign="middle"><label for="transmissionlossinit"></label> 
     <input type="text" name="transmissionlossinit" id="transmissionlossinit" value="${beanAnalysis.transmissionLoss}"/></td> 
    <td align="center" valign="middle"><label for="transmissionloss"></label> 
     <%--CALCULATION RESULT WILL BE DISPLAYED HERE--%> 
     <input type="text" name="transmissionloss" id="transmissionloss" /></td> 
</form> 
</body> 

Antwort

0

Es ist wahrscheinlich, dass Sie AJAX verwenden müssen, um den Wert zu Java-Code zu übergeben. Ich denke, Dojo hat einige Hilfsmittel dafür. Sie müssen auch Ihren Java-Code instrumentieren, um mit den Anforderungen fertig zu werden und die eigentliche Logik auszuführen.

+0

Danke für die Antwort @bebraw. Ich werde es versuchen. – user1221330

+0

Eine Frage: Wie kann ich die Antwort von JSP an den Ajax-Anrufer übergeben? Von AJAX Tutorial finde ich, dass asp verwenden: response.expires = -1 response.write (Wert) und PHP verwendet: Antworten $ = $ value; Aber ich habe kein Beispiel für JSP gefunden. Kannst du mir zeigen, wie man es in Jsp macht? – user1221330

+0

Hallo. Ich benutze JSP nicht wirklich. Die Prinzipien sind jedoch überall ziemlich gleich. Vielleicht möchten Sie ein bestimmtes JSP-spezifisches Tutorial ausprobieren: http://www.ajaxprojects.com/ajax/tutorialdetails.php?itemid=580. Passe das an, um mit Dojo zu arbeiten. –

0

Es funktioniert nicht, da clientseitiges JavaScript in einer JSP serverseitige Java-Methoden nicht aufrufen kann. Sie haben zwei Möglichkeiten: (1) Implementieren Sie Ihre Berechnung stattdessen in JavaScript, oder (2) führen Sie einen Ajax-Aufruf an einen serverseitigen Dienst durch, der die Berechnung durchführt.

+0

Danke @cebarett, ich denke, ich werde zuerst JavaScript verwenden. – user1221330

+0

Eine Frage: Wie kann ich die Antwort von JSP an den Ajax-Anrufer weitergeben? Von AJAX-Tutorial, ich finde, dass Asp wird verwenden: response.expires = -1 Antwort.schreiben (Wert) Und PHP verwendet: $ Antworten = $ Wert; Aber ich habe kein Beispiel für JSP gefunden. Kannst du mir zeigen, wie man es in Jsp macht? – user1221330

0

Ihr Berechnungscode sollte ein reguläres Servlet sein, das speziell für die von Ihnen benötigten Berechnungen ausgelegt ist. JSP-Seiten eignen sich am besten zum Bereitstellen von HTML und/oder direkt darstellbaren Inhalten.

Denken Sie daran, sobald die Seite geliefert wurde, wird jedes Javascript auf der Seite auf dem Client/Browser ausgeführt. Sie haben keinen direkten Zugriff mehr auf Java-Strukturen. Sie müssen AJAX verwenden, um mit dem Server zu kommunizieren. Lassen Sie das Servlet, das Sie aufrufen, ein JSON-Objekt zurückgeben, das die Ergebnisse der Berechnung enthält.

Verwenden Sie auf der Clientseite dojo.xhr (Get oder Post-Version), und legen Sie die handleAs-Eigenschaft auf 'json' fest. Beispiel:

dojo.xhrGet({ 
    // URL to servlet that will do computation for us on the server 
    url: url_to_calc_servlet, 

    // Tell Dojo to handle return value as a JSON string, so dojo will 
    // auto-convert it into an Object. 
    handleAs: 'json', 

    // Specify request parameters to servlet as an object of 
    // name/value pairs. 
    content: { 
sliderValue: XXX 
    }, 

    // Define callback function for dojo to call when servlet returns 
    load: function(response) { 
    // response will be the object your servlet returned 
    // ... access response data and update page accordingly... 
    } 
}); 

Überprüfen Sie die Dojo-Dokumentation für weitere Informationen zu dojo.xhr.

+0

tatsächlich, ich habe dieses Problem mit Servlet gelöst. aber ich habe einen anderen Ansatz gewählt als deinen. danke trotzdem @ewh. – user1221330

Verwandte Themen