2012-04-11 53 views
0

我正在使用dojo滑塊創建一個GUI。除滑塊外,還有一個文本框用於顯示滑塊的當前值。將javascript函數的參數傳遞給java代碼

我想要的是,每次滑動滑塊時,滑塊的當前值都會出現在文本框中。接下來,該值將用於進一步計算,結果將顯示在另一個文本框中。

我一直在做的是:在dojo滑塊內部,我調用了一個傳遞滑塊當前值的javascript函數。

在javascript函數中,我想將函數的參數傳遞給函數內部的java代碼。該參數將被java代碼用來進行計算。

我的問題是我無法將參數傳遞給java代碼。我的問題是我該怎麼做?

下面是我寫的編碼:

<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> 

回答

0

很可能你需要使用AJAX的值傳遞給Java代碼。我想Dojo有一些實用程序。您還需要測試Java代碼來處理請求並執行實際的邏輯。

+0

感謝您的答案@bebraw。我會試試看。 – user1221330 2012-04-11 09:33:24

+0

一個問題:我如何將響應從jsp傳遞給ajax調用者? 從AJAX教程中,我發現asp將使用: response.expires = -1 response.write(value) 而php使用: $ responses = $ value; 但我沒有找到jsp的例子。你能告訴我如何在jsp中做到這一點嗎? – user1221330 2012-04-11 12:15:08

+0

嗨。我沒有真正使用JSP。不過,這些原則在各地都差不多。您可能想查看一些JSP特定教程,例如:http://www.ajaxprojects.com/ajax/tutorialdetails.php ?itemid = 580。適應與Dojo一起工作。 – 2012-04-11 12:38:37

0

它不起作用,因爲JSP中的客戶端JavaScript無法調用服務器端Java方法。您有兩種選擇:(1)用JavaScript實現計算,或者(2)對執行計算的服務器端服務執行Ajax調用。

+0

謝謝@cebarett,我想我會先嚐試使用JavaScript。 – user1221330 2012-04-11 09:37:14

+0

一個問題:我如何將響應從jsp傳遞給ajax調用者? 從AJAX教程中,我發現asp將使用: response.expires = -1 響應。寫(值) 和php的使用: $ responses = $ value; 但我沒有找到jsp的例子。你能告訴我如何在jsp中做到這一點嗎? – user1221330 2012-04-11 12:18:59

0

您的計算代碼應該是一個常規的servlet,專門用於執行您所需的邏輯/計算。 JSP頁面最適合提供HTML和/或直接可呈現內容。

請記住,一旦頁面提供,頁面上的任何JavaScript都會在客戶端/瀏覽器上執行。您不再可以直接訪問Java結構。您必須使用AJAX與服務器進行通信。讓你調用的servlet返回一個包含計算結果的JSON對象。

在客戶端,使用dojo.xhr(Get或Post版本)並將handleAs屬性設置爲'json'。例如:

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... 
    } 
}); 

有關dojo.xhr的更多信息,請查閱Dojo文檔。

+0

實際上,我通過使用servlet解決了這個問題。但我用了不同於你的方法。無論如何感謝@ewh。 – user1221330 2012-04-26 08:58:41