JQuery、JSON、および AJAX に関する本を何冊か読みました。jsp とサーブレットの古いテクノロジを使用していた作業中の Web サイトを、JSON、AJAX、および JQuery を使用する jsp に変換しようとしています。必要なことを行うためにすべてを統合するのに苦労しています。
1) ユーザーは単純な jsp 'login.jsp' を使用してログインします。次の宛先に送信します。
<form action="http://localhost:8080/sc_demo/dispatcher" name="login" id="login">
<div>
<label for="userId" class="label">UserId</label>
<input type="text" name="userId" id="userId" size="30">
</div>
<div>
<label for="password" class="label">Password</label>
<input type="password" name="password" id="password" size="30">
</div>
<div>
<label for="organization" class="label">Organization</label>
<input type="text" name="organization" id="organization" size="30">
</div>
<div>
<input type="hidden" name="event" id="event" value="_login">
<input type="submit" name="submit" id="submit" value="Login">
</div>
</form>
2) ディスパッチャ サーブレットはリクエストを受信し、_login のイベント値を使用して、認証を行う EventHandler を呼び出し、ユーザー「トークン」を作成します。次に、以下を使用します。
Token userToken = new Token(userId, userName, organization, role, new GenericNotifier());
String jspPath = "/home.jsp?parms="+userToken.getResponseString("/home.jsp", "HR", "tasklist");
getServletContext().getRequestDispatcher(jspPath).forward(
request, response);
3) これにより、jsp "home.jsp" が正しく表示されます。
4) home.jsp には
<script type="text/javascript" src="_js/jquery-1.7.2.min.js"></script>
<script type="text/javascript" src="_js/nav1.1.min.js"></script>
<script type="text/javascript" src="_js/jquery.countdown.js"></script>
<script type="text/javascript" src="_js/parseURL.js"></script>
<script type="text/javascript" src="_js/header.js"></script>
ページのヘッダーに。5) header.jsp には次のものがあります。
<!DOCTYPE HTML>
<%@ page import="java.util.*" %>
<%
String userToken = (String)request.getParameter("parms"); // from login
%>
<script>
$(document).ready(function(){
var data = $.parseJSON('<%=userToken%>');
alert('app = '+data.app);
$('#doApplication').text(data.app);
});
</script>
<div id='doApplication'></div>
<hr>
今、問題は、userToken から何も解析できないことです。以下は、ページ ソースの一部です。
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Home</title>
<script type="text/javascript" src="_js/jquery-1.7.2.min.js"></script>
<script type="text/javascript" src="_js/nav1.1.min.js"></script>
<script type="text/javascript" src="_js/jquery.countdown.js"></script>
<script type="text/javascript" src="_js/parseURL.js"></script>
<script type="text/javascript" src="_js/header.js"></script>
<script type="text/javascript" src="./_js/jquery.validate.min.js"></script>
<!-- jQuery UI Theme -->
<link type="text/css" href="./_js/alpaca/lib/jquery-ui-latest/jquery-ui-latest.custom.css" rel="stylesheet"/>
<!-- Additional CSS -->
<link type="text/css" href="./_js/alpaca/examples/css/960.fluid.css" rel="stylesheet"/>
<script type="text/javascript" src="https://use.typekit.com/fnm3kpm.js"></script>
<script type="text/javascript">try{Typekit.load();}catch(e){}</script>
<!-- LINK REL="stylesheet" HREF="_css/site.css" / -->
<LINK REL="stylesheet" HREF="_css/home.css" />
<LINK REL="stylesheet" HREF="_css/jquery.countdown.css" />
</head>
<body>
<div class="wrapper">
<div class="header">
<script>
$(document).ready(function(){
var data = $.parseJSON('{jsp:"home.jsp",app:"HR",process:"tasklist",userToken: {result:"S",tokenId:"98797",userID:"woo",userName:"John",organization:"Shoulders",role:"mgr",notifierId:"956597"}}');
if( token != null )
{
$('#token').text(token);
}
alert('app = '+data.app);
$('#doApplication').text(data.app);
});
</script>
.parseJSON('X'); の文字列 X を確認しました。スペースも改行もありません。有効な JSON オブジェクトのようです。それを解析しませんか?エラーは発生しませんが、そこにあるはずの data.app の値を含むアラート フィールドも表示されません。
私の一般的な問題は、ページ フローが「事前定義」されていない例が見当たらないことです。私の場合、各アクションは、現在の状態 (userToken から) とフォーム データに関する情報を含む、ディスパッチャへの送信 (できれば AJAX を使用) を生成します。フォーム データに応じて、ディスパッチャは次の jsp を決定し、リクエスト/レスポンスを使用して、userToken とそのページ フォームに表示される情報を使用してそのページに戻ります。
では、フォーム データをディスパッチャーに送信し、各ページの上部にある $(document).ready 関数で応答データをキャッチし、解析して表示するにはどうすればよいでしょうか?