2016-10-26 9 views
0

私は1つのJava Webアプリケーションを持っています。 は私のUSER_OBJECTSクラスはJSPからサーブレットにJavaオブジェクトを渡す

public class User_Objects { 
    public String firstName; 
    public String middleName; 

    public String getFirstName() { 
     return firstName; 
    } 

    public void setFirstName(String firstName) { 
     this.firstName = firstName; 
    } 

    public String getMiddleName() { 
     return middleName; 
    } 

    public void setMiddleName(String middleName) { 
     this.middleName = middleName; 
    } 
} 

以下の通りである私は、私は成功した私のJSPフォームにこのオブジェクトを受け取り、次のコード

User_Objects fillObj = fillData(request); 
    request.setAttribute("reqObj", fillObj); 
    RequestDispatcher view = request.getRequestDispatcher("/organization.jsp"); 
    view.forward(request, response); 

public User_Objects fillData(HttpServletRequest request) { 
    User_Objects fillObj = new User_Objects(); 

    try { 
     fillObj.setFirstName(request.getParameter("txtFirstname")); 
    } catch (Exception e) { 
    } 

    try { 
     fillObj.setMiddleName(request.getParameter("txtMiddlename")); 
    } catch (Exception e) { 
    } 

    return fillObj; 
} 

を使用してJSPに私のJavaのUSER_OBJECTSで要求を転送します。しかし、私はサーブレットに再びこのオブジェクトを送りたいと私は上をクリックすると、私のJSPフォーム上のボタンを提出し、

User_Objects obj = (User_Objects) request.getAttribute("reqObj"); 

コードの下

request.getAttribute("reqObj")を使用して、私のサーブレットにこのオブジェクトを取得しようとする私にヌル

私を与えますJSPフォームコードは次のとおりです

<%@ page import="otn.aitc.io.User_Objects" %> 
<%@ 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>Organization</title> 
<link rel="stylesheet" href="css/jquery-ui.css"> 
<script src="js/jquery-1.12.4.js"></script> 
<script src="js/jquery-ui.js"></script> 
<script> 
    $(function() { 
     var reqObj = '${reqObj}'; 
     var reqStatus = '${orgStatus}'; 
     var orgJson = '${reqOrgJson}'; 
     orgJson = orgJson.replace("/", "'"); 

     if(reqStatus != "" || orgJson != "") { 
      if(reqStatus == "false") { 
       document.getElementById("lblError").style.display = ''; 
      } 
      else { 
       document.getElementById("lblError").style.display = 'none'; 
      } 

      var availableTutorials = []; 
      if(orgJson != "") { 
       var parsed = JSON.parse(orgJson); 
       for(var x in orgJson) { 
        if(parsed[x] != undefined) { 
         availableTutorials.push(parsed[x]); 
        } 
       } 
      } 

      $("#txtOrgName").autocomplete({source: availableTutorials}); 
     } 
     else { 
      window.location.href = "index.jsp"; 
     } 
    }); 

    function validateOrg() { 
     var orgName = document.getElementById("txtOrgName"); 
     if (orgName.value.trim().length == 0) { 
      alert("Enter Org Name"); 
      return false; 
     } 
    } 
</script> 
</head> 
<body> 
    <form name="orgname" action="org_name" method="post"> 
     <table align="center"> 
      <tr align="center"> 
       <td colspan="4"><img src="images/logo.jpg" /></td> 
      </tr> 
      <tr> 
       <td>Organization :</td> 
       <td><input type="text" id="txtOrgName" name="txtOrgName" /><label style="color: red;">*</label></td> 
      </tr> 
      <tr> 
       <td align="center" colspan=2><br/><input type="submit" name="btnOrgName" id="btnOrgName" 
        value="Validate" onclick="return validateOrg();" /></td> 
      </tr> 
     </table> 
     <p align="center"><label id="lblError" style="color: red;">Error Message.</label></p> 
    </form> 
</body> 
</html> 

私はEclipseでJavaを使用しています。

+0

** User_Objects **はシリアル化されているかどうかを確認します。そうでない場合は、Serializableインターフェイスを実装する必要があります –

+0

@KevalPithva私はちょうど私の質問を更新しました。再度確認してください。 – user3441151

答えて

0

異なる実行スコープを混在させて一致させないでください。

サーブレットとJSPページはサーバー側で実行されます(実際には、JSPページもサーブレットにコンパイルされます)。 HTTP要求が完了すると、要求属性を含む要求ベースのオブジェクトはすべて破棄されます。 最後に、HTMLテキストを生成するテンプレートエンジンです。

このHTMLテキスト(JavaScriptが組み込まれています)は、クライアントのブラウザによって実行されます。この実行範囲は、このHTMLページを作成したサーバー要求スコープとはまったく異なります。したがってJavaScriptコードでは、サーバー側でそのページを作成するために使用されたすべてのJavaオブジェクトは不明でアクセス不可能です。

あなたには2つの選択肢があります。

  1. HTMLを作成するには、サーバーサイドオブジェクトを再作成するのに十分な情報が含まれていますが、例えば。名前と年齢属性を持つPersonオブジェクトがある場合は、隠しフォームフィールドとして名前と年齢を含めることができます。フォームを送信した後は、Personオブジェクトを、リクエストパラメータとして入ってくる隠しフィールド値で再作成することができます。 プロ:実装が簡単です。 Con:小さなデータに対してのみ実行可能です。データはクライアントに公開され、操作することができます。

  2. セッション内でサーバー側にオブジェクトを格納します。
    Pro:データがクライアントに公開されていません。 Con:セッション変数への同時アクセスが可能なため、実装がより複雑になりました(ブラウザは同じセッションに対して複数の要求を同時に行うことができます)。

関連する問題