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

計算コードは、必要なロジック/計算を実行するために特別に設計された通常のサーブレットである必要があります。JSPページは、HTMLや直接レンダリング可能なコンテンツを提供するのに最適です。

ページが提供されると、ページ上のJavaScriptがクライアント/ブラウザで実行されることを忘れないでください。Java構造に直接アクセスできなくなりました。サーバーと通信するには、AJAXを使用する必要があります。呼び出すサーブレットに、計算結果を含む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のドキュメントを確認してください。

于 2012-04-25T06:43:17.113 に答える
0

値を Java コードに渡すには、AJAX を使用する必要がある可能性があります。Dojo にはそのためのユーティリティがいくつかあると思います。また、リクエストを処理し、実際のロジックを実行するために、Java コードをインストルメント化する必要があります。

于 2012-04-11T05:41:11.823 に答える
0

JSP のクライアント側 JavaScript はサーバー側 Java メソッドを呼び出すことができないため、これは機能しません。2 つのオプションがあります。(1) 代わりに JavaScript で計算を実装するか、(2) 計算を実行するサーバー側サービスに対して Ajax 呼び出しを行います。

于 2012-04-11T05:42:03.833 に答える