2016-05-11 24 views
0

我是JSP,Servlet技術的新手。我正在開發一個使用JSP的示例演示應用程序,其中我使用了一個header.jsp文件,我在很多屏幕上都包含這個文件。如何從servlet設置header jsp頁面字段?

header.jsp有8個字段,它的值應根據案例號搜索和檢索的細節設置。

我在谷歌搜索找到一種方法來設置header.jsp字段的值。但我沒有辦法。所以最後我使用了會話,並且在會話中設置了要顯示在標題中的字段。每次搜索一個案例時,我都會初始化這些字段。

我知道這不是一個好的做法。但我沒有得到一個正確的方法。有人可以爲此提出一個好方法嗎?

的header.jsp:

<body> 
<div style="background-color:#94BFA6;"> 
    <table> 
     <tr> 
      <td width = "15%" class="label"> Case Name </td> 
      <td width = "20%"> <% out.print(session.getAttribute("caseNumber") + "&nbsp;&nbsp;&nbsp; " + session.getAttribute("caseName")); %> </td> 
      <td width = "10%" class="label"> Magi </td> 
      <td width = "15%"> <% out.print(session.getAttribute("magiSts")); %></td> 
      <td width = "10%" class="label"> Language </td> 
      <td width = "15%"> <% out.print(session.getAttribute("language")); %></td> 
      <td width = "10%" class="label">Office Number</td> 
      <td width = "15%"><% out.print(session.getAttribute("officeNumber")); %></td> 
     </tr> 
     <tr> 
      <td class="label">Cash</td> 
      <td><% out.print(session.getAttribute("cashSts")); %></td> 
      <td class="label">Food Stamps</td> 
      <td><% out.print(session.getAttribute("foodStampSts")); %></td> 
      <td class="label">Medi-Cal</td> 
      <td><% out.print(session.getAttribute("medicalSts")); %></td> 
      <td class="label">File</td> 
      <td><% out.print(session.getAttribute("file")); %></td> 
     </tr> 
    </table> 
</div> 
</body> 

而且裏面SearchServlet.java我設置會話變量:

public void initHeaderFields(String caseNum){ 

    if(!caseNum.isEmpty()){ 
     ArrayList<String> parms = new ArrayList<String>(); 
     parms.add("S"); 
     parms.add(caseNum); 
     parms.add(getCurrentDate()); 

     ResultSet rs = conn.runStoredProc("DC001R",parms); 
     try{ 
      if(rs.next()){ 
       session.setAttribute("caseNumber", rs.getString("CS_CSN_NUM").trim()); 
       session.setAttribute("caseName", rs.getString("CS_CASE_NAME").trim()); 
       session.setAttribute("language", getLanguage(rs.getString("CS_PRIM_LANG").trim())); 
       session.setAttribute("officeNumber", rs.getString("CS_CASH_OFF_NUM").trim()); 
       session.setAttribute("magiSts", getAppStatus(rs.getString("CS_CC_STS").trim())); 
       session.setAttribute("cashSts", getAppStatus(rs.getString("CS_CASH_STS").trim())); 
       session.setAttribute("foodStampSts", getAppStatus(rs.getString("CS_FS_STS").trim())); 
       session.setAttribute("medicalSts", getAppStatus(rs.getString("CS_MC_STS").trim())); 
       session.setAttribute("file", getAppStatus(rs.getString("CS_CASH_FILE").trim())); 
      } 
      rs.close(); 
     } 
     catch(SQLException e){ 
      e.printStackTrace(); 
      System.out.println("error while initializing header page"); 
     } 

    } 

} 

回答

0

如果數據不相關的會話,但請求是更好地將它們存儲在請求中。

您只需簡單地將對會話的引用替換爲對請求的引用,並且它可以工作(在jsp和servlet上也是如此)。

此外,它可以是有用的,而不是使用下面

<% out.print(session.getAttribute("magiSts")) %> 

該等效代碼的(I替換請求還會話)

<%= request.getAttribute("magiSts") %> 

${magiSts} 
+0

但在這種..每次我重定向到一個頁面頭頁面包括....我必須設置請求字段的權利? – Madhusudan

+0

對。如果數據對會話的每個請求都是通用的,則可以將它們保存在會話中,而不必在請求之間重新啓動它們。 –

+0

我在很多其他頁面中都包含了頁面頁面...所以有什麼方法可以將頁眉字段存儲在某些全局可訪問的數據結構中? – Madhusudan