0

検索アプリケーションがあります。

私の検索結果はすべて転送オブジェクトのプロパティとして設定されています。

私のプロセッサJavaクラスでは、TOを次のようにコンテキストに入れています。

ctx.putUserData("searchDetailsTO", searchDetailsTO);

上記のオブジェクトに加えて、いくつかの文字列も次のように設定されます。

    ctx.putUserData("productName", productName);
    ctx.putUserData("productNameCriteria", productNameCriteria);
    ctx.putUserData("currency", currency);

私のjspでは、TOに次のようにアクセスしています。

<jsp:useBean id="searchDetailsTO" scope="session" type="com.domain.SearchDetailsTO" />

次のように文字列にアクセスします。

<%
String  productName =(String)session.getAttribute("productName");
String  productNameCriteria =(String)session.getAttribute("productNameCriteria");
String  currency =(String)session.getAttribute("currency");
int searchResultsSize = searchDetailsTO.getTotalResults();
SomeTO someTO = new SomeTO();
%>

その後、JSP で、上記の TO と文字列を次のように使用します。

<%
if (productNameCriteria .equals("NAME_BEGINS")) { 
%> 
  <input type="radio" name="productNameCriteria" id="productNameCriteria" value="NAME_BEGINS" CHECKED/><b>Begins With</b>
  <input type="radio" name="productNameCriteria" id="productNameCriteria" value="NAME_CONTAINS" /><b>Contains</b>
  <input type="radio" name="productNameCriteria" id="productNameCriteria" value="NAME_IS" /><b>Exact Match</b>
<% 
} else if (productNameCriteria .equals("NAME_CONTAINS")) { 
%> 
  <input type="radio" name="productNameCriteria" id="productNameCriteria" value="NAME_BEGINS"/><b>Begins With</b>
  <input type="radio" name="productNameCriteria" id="productNameCriteria" value="NAME_CONTAINS" CHECKED/><b>Contains</b>
  <input type="radio" name="productNameCriteria" id="productNameCriteria" value="NAME_IS" /><b>Exact Match</b>                      
<% 
}
else { 
%>  
  <input type="radio" name="productNameCriteria" id="productNameCriteria" value="NAME_BEGINS"/><b>Begins With</b>
  <input type="radio" name="productNameCriteria" id="productNameCriteria" value="NAME_CONTAINS"/><b>Contains</b>
  <input type="radio" name="productNameCriteria" id="productNameCriteria" value="NAME_IS" CHECKED/><b>Exact Match</b>
<% 
}
%>  

<%
if (searchResultsSize > 0) {
for (int k = 0; k < searchDetailsTO.getResult().size(); k++) {
  someTO = (someTO) searchDetailsTO.getResult().get(k);
%>
<Table>
<TR>
<TD class="gridrow<%=k%2%>" align="center" style="style" width="120">
     <%=someTO.getSomething()%>
</TD>   
<TD class="gridrow<%=k%2%>" align="left" style="style" width="372">
  <A href="#"onclick="loadDetails('<%=someTO.getSomeId()%>', '<%=someTO.getSomethingMore()%>')"; ><%=someTO.getSomethingElse()%></A>
</TD>  
</TR>
</Table>
<%
} }
%>

などなど

私のjavascript関数もTOからの値を使用します。何かのようなもの:

function someFunc(){
       if(option=='goto' && !(pageNum>0 && pageNum<=<%=searchDetailsTO.getTotalPages()%>))
       {
  alert("Please enter valid Page# (Range 1 to <%=searchDetailsTO.getTotalPages()%>)");
       }

JSTL と EL の使用に切り替えて、上記のスクリプトレットの使用を避けたいと考えています。しかし、EL と JSTL は私にとってギリシャ語のようなものです。

(1) 上記のコード ブロックに相当する jstl は何ですか? JSTL/EL を使用して同じことを達成するには、バックエンドに大きな変更を加える必要がありますか??

(2) jsp にいくつかの JavaScript 関数があります。それらは JSTL の影響を受けますか? たとえば、上記のコードの loadDetails 関数と、TO を使用する上記の someFunc 関数の場合。

(3) jstl/elでTOのフラグ関数を呼び出す方法

<%
if(searchDetailsTO.isPrevious() || searchDetailsTO.isNext()) {      
%>  

使用して

c:if test="${(searchDetailsTO.isPrevious()) or (searchDetailsTO.isNext())}"   

動かない

使ってみた

<c:when> 

ただし、上記のラジオ ボタンの if else コードでは、3 つのボタン (9 つのボタン) の 3 つの行を取得し始めました。

読んでくれてありがとう!!

4

3 に答える 3

2

最初にjstlのtaglibをインポートし<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> ます。

  • if..else使用c:chooseおよびc:when/ c:otherwise。_
  • for使用するためc:forEach
  • 変数の使用を宣言するにはc:set
  • セッションからデータを取得するには、を使用します${pageContext.session.varName}。(varNameを取得するセッションデータの名前に置き換えます)
  • ループ内のサイズを取得するには、を使用しますfn:length(dataList)。(これを使用するには、関数taglibをインポートする必要があります<%@taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>

jstlを使用するには、プロジェクトに2つのjarを追加する必要がありますjstl.jarstandard.jar


JSTLはJavaスクリプトの動作に影響を与えません。

于 2011-11-10T07:23:24.813 に答える
1

<jsp:useBean/>: もう必要ありません。

ローカル変数を初期化する最初のスクリプトレット: もう必要ありません。

if / else if / else: と取り換える

<c:choose>
    <c:when test="${productNameCriteria == 'NAME_BEGINS'}">

    </c:when>
    <c:when test="${productNameCriteria == 'NAME_CONTAINS'}">

    </c:when>
    <c:otherwise>

    </c:otherwise>
</c:choose>

ループ前の if テストは不要です。残しておきたいならそのまま使う

<c:if test="${!empty searchDetailsTO.result}">

ループ: 置き換え

<c:forEach var="detail" items="${searchDetailsTO.result}">

</c:forEach>

<%=someTO.getSomeId()%>: と取り換える${detail.someId}

もちろん、JavaScript は影響を受けません。JSP (サーバー側) の場合、JavaScript は HTML のように出力する単なるテキストです。クライアント側でのみ意味があります。

于 2011-11-10T07:26:04.843 に答える
1

if ..else ...あなたが使用することができます<c:choose>

例えば ​​:

<c:choose>
      <c:when test="${productNameCriteria eq 'NAME_BEGINS'}">

      </c:when>
      <c:when test="${productNameCriteria eq 'NAME_CONTAINS'}">

      </c:when>
      <c:otherwise>

      </c:otherwise>

</c:choose>

sizeと_loop

fn:length()for loop を使用して取得できるサイズc:forEach

回答から情報を操作して正確なコードを取得できることを願っています

于 2011-11-10T07:16:49.513 に答える