2009-08-20 20 views
0

これは、クライアント側のスクリプトとサーバー側の要素を併用する試みです。jspを使用したjavascript

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
    pageEncoding="ISO-8859-1"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<title>Insert title here</title> 
</head> 
<body> 

<form name="test" action="test.jsp" method="post" enctype="multipart/form-data"> 
<select name="harish" onchange=callme();> 
<option value="1">1</option> 
<option value="2">2</option> 
</select> 
<script> 
var jsvar="Hello"; 
function callme() 
{ 
    alert(jsvar); 
    jsvar=document.getElementById("harish").value; 
    alert(jsvar); 
} 
</script> 
<% 
String s=(String)("<script>document.writeln(jsvar)</script>").toString(); 
out.println(s.equals("Hello")); 
if(!(s.equals("Hello"))) 
{ 
String jspvar="<script>document.writeln(jsvar)</script>"; 
out.println("jspvar"+jspvar); 
session.setAttribute("test",jspvar); 
} 
    %> 
</form> 


</body> 
</html> 

今、私がしようとしていますどのようなセッションは誰が助けるfails.Can JavaScriptから私の悪い値は、JSP/Javaの変数とtherby私の条件if(!(s.equals("Hello")))上で適切に座っていませんvariable.Butとして選択した値を設定することですここで私...

更新:

は以下

は、二つのフレームでHTMLページを持ってこの質問のための解決策になることができます。最初のページに、挿入するすべてのJavaScript値が含まれるようにします。フレームの2番目のページ(非表示)が実際にトリックを行います。それは実際にJSPです。最初のページのボタンをクリックすると、位置を非表示フレーム(2ページ目)にし、チェック/コンバージョンを実行し、クロスフレームJAVASCRIPTを使用して最初のページの変数を設定します。あなたは常に見つける変数sにおけるよう

答えて

2

私の条件((s.equals( "こんにちは"))!)が

を失敗した場合書く:

out.println("this".equals("that")); 

これは常に偽です。

これで、選択した値をセッション変数として設定しています。

セッションで変数を設定するには、フォームをサーバーにPOSTする必要があります(AJAX技術などは無視してください)。 hereと言ったように、multipart/form-dataを使用するにはMIMEパーサーが必要です。下のフォームはデフォルトのenctypeを使用しています。

このフォームは、ドロップダウンからオプションを選択すると、フォームをサーバーに送信します。 JSPが実行されるたびに、scriptlet <% ... %>テストを使用して、「harish」パラメータがポストされているかどうかを確認します。それがあれば、それをセッションに配置します。式<%= ... %>は、現在のセッション値を表示するために使用されます。

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
    pageEncoding="ISO-8859-1"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<!-- header removed for clarity --> 
<body> 
<form id="test" name="test" action="test.jsp" method="post"><select 
    name="harish" onchange="document.getElementById('test').submit();"> 
    <option value="select">select an option</option> 
    <option value="1">1</option> 
    <option value="2">2</option> 
</select></form> 
<% 
    //see if a parameter was sent from page; "harish"==name attr on select 
    String value = request.getParameter("harish"); 
    if (value != null) { 
    //store it in session 
    session.setAttribute("test", value); 
    } 
%> 
<%="harish=" + session.getAttribute("test")%> 
</body> 
</html> 

これは、上記のページはtest.jspであることを前提として - そのバック自体にページの記事。そうでない場合は、スクリプトレットと式をtest.jspに移動する必要があります。

0

Javaは、サーバー側で評価され

<script>document.writeln(jsvar)</script> 

Javascriptがそれがクライアントのブラウザ上で、opposide側で評価されるので、あなたの方法にはない理由です

このコードが置かれているのと同じjspでフォームをPOSTし、POSTされたデータから結果を取得して、スクリプトレットを使用するようにすることができます。私の記憶が正しければ、あなたが

request.getParameter("PARAMETER_NAME") 

を使用することができますので、ちょうどこのコードは、フォームのアクションと選択された値を取得するために、上記のコードにあるJSPの名前を追加します。

String s=(String)("<script>document.writeln(jsvar)</script>").toString(); 
out.println(s.equals("Hello")); 

が...ほとんど同じです。これは

+0

実際には、method = "post" enctype = "multipart/form-data"はfiles以外のフォーム要素をサポートしていないため、この問題を解決するためにプッシュされています。なぜこの問題が発生するのかわかりません。 – Harish

関連する問題