JSP onClickでメソッドを呼び出したいのですが、メソッドはスクリプトレット内の同じJSPにあります。
これをアーカイブするにはどうすればよいですか?
<%@ page import="Java.io.*,Java.lang.*,Java.util.*,Java.net.*,Java.util.*,Java.text.*"%>
<%@ page import="javax.activation.*,javax.mail.*,org.Apache.commons.*"%>
<%@ page import="javax.servlet.http.*,javax.servlet.*"%>
<%!
public String sendMail(String to, String sub, String msg) {
String res = null;
System.out.println("HI");
return res;
}%>
<html>
<head>
<title>Send Email using JSP</title>
</head>
<body>
<center>
<h1>Send Email using JSP</h1>
</center>
<form>
<label>Email To</label><br />
<input type="text" name="to" /><br />
<label>Subject</label><br />
<input type="text" name="sub" /><br />
<label for="body">Message</label><br />
<input type="text" name="msg" /><br />
<input type="submit" onClick="sendMail( to, sub, msg )"/>
</form>
</body>
</html>
メソッド名は"sendMail"です。JSPのみでコード全体を実行したい送信ボタンで呼び出されます。
これは私がやったことです
<%@ page import= "Java.io.*,Java.lang.*,Java.util.*,Java.net.*,Java.util.*,Java.text.*"%>
<%@ page import="javax.activation.*,javax.mail.*,org.Apache.commons.*"%>
<%@ page import="javax.servlet.http.*,javax.servlet.*"%>
<%!
public String sendMail(String to, String sub, String msg) {
String res = null;
System.out.println("HI");
return res;
}
%>
<%
String a = request.getParameter("to");
if(a != null){
sendMail(request.getParameter("to"),request.getParameter("sub"),request.getParameter("msg"));
}
%>
<html>
<head>
<title>Send Email using JSP</title>
</head>
<body><center>
<form action="#" method="post">
<label>Email To</label><br />
<input type="text" name="to" /><br /> <br />
<label>Subject</label><br />
<input type="text" name="sub" /><br /> <br />
<label for="body">Message</label><br />
<input type="text" name="msg" /><br /> <br />
<input type="submit"/>
</form>
</center></body>
</html>
action="#"
はページをリロードし、パラメーターが空白でない場合に必要なメソッドを呼び出すif
条件があります(デフォルトでは、最初の呼び出しではパラメーターがnullになることに注意してください)。
onclick
イベントは、ユーザーが要素をクリックしたときに発生します。この属性には、JS関数(フロントエンド)を呼び出す機能があります。
あなたのケースでは、Java関数(サーバー側))を呼び出したいので、Javaコードをサーブレットに移動して使用するのが最善の方法です。
とにかく、Java関数をjspに保持したい場合は、この方法でajaxを使用してこれを行うことができます
<script type="text/javascript">
$(document).ready(function() {
$('#sendMailBtn').click(function (){
$.ajax({
type: "post",
url: "/path",
data: "email=" + $('#email').val() + "&subject="+$('#subject').val() + "&msg=" + $('#msg').val(),
success: function(msg){
//
}
});
});
});
</script>
AJAXは開発者の夢です。
- ページをリロードせずにWebページを更新する
- サーバーからデータをリクエストする-ページが読み込まれた後
- サーバーからデータを受信する-ページが読み込まれた後
- サーバーにデータを送信する-バックグラウンドで
ここで完全なコードを確認してください
<%@ page import="Java.io.*,Java.lang.*,Java.util.*,Java.net.*,Java.util.*,Java.text.*"%>
<%@ page import="javax.activation.*,javax.mail.*,org.Apache.commons.*"%>
<%@ page import="javax.servlet.http.*,javax.servlet.*"%>
<%!
public String sendMail(String to, String sub, String msg) {
String res = null;
System.out.println("HI");
return res;
}
%>
<html>
<head>
<title>Send Email using JSP</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script>
</head>
<body>
<center>
<h1>Send Email using JSP</h1>
</center>
<form>
<label>Email To</label><br />
<input id="email" type="text" name="to" /><br />
<label>Subject</label><br />
<input id="subject" type="text" name="sub" /><br />
<label for="body">Message</label><br />
<input id="msg" type="text" name="msg" /><br />
<input id="sendMailBtn" type="submit" />
</form>
</body>
<script type="text/javascript">
$(document).ready(function() {
$('#sendMailBtn').click(function (){
$.ajax({
type: "post",
url: "/path",
data: "email=" + $('#email').val() + "&subject="+$('#subject').val() + "&msg=" + $('#msg').val(),
success: function(msg){
//
}
});
});
});
</script>
</html>
詳細はチェック
JSP-サーバーで実行します。
JavaScript-ブラウザで実行されます。
いいえ、JSから魔法のようにそのJSPを呼び出すことはできません。ただし、Ajaxリクエストを送信するか、フォームをjspに投稿できます。ところで、Java=コードをサーブレットに移動して使用することを強くお勧めします。