0

我正在使用 dojo 滑块创建一个 GUI。在滑块旁边有一个文本框,用于显示滑块的当前值。

我想要的是每次滑动滑块时,滑块的当前值都会出现在文本框上。接下来,该值将用于进一步计算,结果将显示在另一个文本框中。

我一直在做的是:在 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>
4

3 回答 3

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 文档以获取有关 dojo.xhr 的更多信息。

于 2012-04-25T06:43:17.113 回答
0

您可能需要使用 AJAX 将值传递给 Java 代码。我猜 Dojo 有一些实用程序。您还需要检测 Java 代码以处理请求并执行实际逻辑。

于 2012-04-11T05:41:11.823 回答
0

它不起作用,因为 JSP 中的客户端 JavaScript 不能调用服务器端 Java 方法。您有两个选择:(1) 改为用 JavaScript 实现计算,或者 (2) 对执行计算的服务器端服务进行 Ajax 调用。

于 2012-04-11T05:42:03.833 回答