2011-08-02 6 views
2

次のコードを実行されます。しかし、スクリプトレットが誤っ

"<%cart.removeItem(0);%>" 

は、ボタンをクリックせずにページをリフレッシュすると実行されます。なぜこうなった?

乾杯。

完全な情報源です。

<html> 
    <head> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
    <title>JSP Page</title> 
    </head> 
    <body> 
    <jsp:useBean id="cart" scope="session" class="myBeans.cart" /> 
    <% 
    cart.addItem("aji", "1000", "1"); 
    cart.addItem("ewer", "200", "1"); 
    cart.addItem("dfwerweji", "10", "1"); 
    cart.addItem("ldsjioi", "1320", "1"); 

    String[] prodNames = cart.getProdNames(); 
    double[] prices = cart.getProdPrices(); 
    int[] qtys = cart.getProdQtys(); 
    double total = 0; 

    for(int i=0; i<prodNames.length; i++){ 
    total += prices[i]*qtys[i]; 
    out.println(prodNames[i]); 
    out.println(" " + prices[i] + " "); 
    out.println("<input type=text name=newQty value=" + qtys[i] + ">"); 
    out.println(" " + prices[i] * qtys[i]); 
    } 
    %> 
    <br/> 
    <button type="button" id="button" onclick="<%cart.removeItem(0);%>">Click me</button> 
    </body> 
    </html> 

答えて

2

あなたの言語をここで混ぜると思います。私は 'カート'はJavaオブジェクトであると思われ、クライアント側でのみJavaScriptオブジェクトを変更できます。あなたはそれを動作させるために、このような何かを持っている必要があります:

<script> 
    doRemoveFirst = function() { new Ajax.Request('removeFirst.page'); }; 
</script> 
<button type="button" id="button" onclick="doRemoveFirst();">Click me</button> 

その後呼ばれるサーバー上のページを持っている「removeFirstと」Javaオブジェクトからそのオブジェクトを削除すること(多分セッションに保存?)とすることができますそれに応じてページを更新してください。

EDIT:これは役に立つ画像です。対角のすべてがクライアント側であり、すべてがサーバー側です。

This Image

EDIT 2:ユーザー

のためのページを削除し、修正するために、私は言うだろう、これはあなたのために働くかもしれない(jQueryの仮定)のようなもの。

$(".item-row").first().remove(); 
$(".item-row").each(function(idx, el) { 
    var elem = $(el).children().find('.index-cell'); 
    elem.text(+elem.text() - 1); 
}); 
+0

はい、カートはjavabeanオブジェクトです。あなたのコード、 '新しいAjax.Request(' removeFirst.page ');'、removeFirst.pageのポイントは何ですか? – user859385

+0

私は編集して、完全なソースを入れました。希望は私のコードをよりよく理解できるようにします。ありがとう – user859385

+0

@ user859385:クライアント側とサーバー側のオブジェクトとアクションが混在しています。 'カート'はサーバー側でのみ使用でき、ボタンのクリックはクライアント側で使用できます。私のAjax.Request(AjaxリクエストのPrototype Libraryの略語)のポイントは、そのページを実行するようにサーバーにコールバックすることです。そのページでは、カートのオブジェクトからアイテム0が削除され、クライアント側のページを再描画したり、更新されたデータを挿入したり、Javascriptで非表示にするだけです。それは理にかなっていますか? –