2014-12-01 64 views
0

我有2個JSP文件中,第一個我已經有了一個形式:forech:查詢JSTL

 <form action="searchresult" method="POST"> Words seperated by commas <br><br><br> 
      Enter words you look for: <input type="text" name="searchText" value="" /> 
      <button type="submit" name="titleSearch" value="costam">Search in title</button> 
      <button type="submit" name="contentSearch">Search in content</button> 
     </form> 

在第二JSP我分裂以上

從表單中的文本
 <c:set var="searchText" value="${param.searchText}"/> 
     <c:set var="splitted" value="${fn:split(searchText, ',')}" /> 

,然後我要檢查,如果從數據庫中任何記錄中包含的任何話,從「分裂」陣列

 <c:if test="${not empty param.titleSearch}"> 
      <sql:query var="result1" dataSource="jdbc/myProba"> 
       SELECT title, shortcon FROM bazaprojekt.ad WHERE 
        <c:forEach items="${splitted}" var="word"> 
         title LIKE ? <sql:param value='${word}'/> OR 
        </c:forEach> 
      </sql:query> 
     </c:if> 
      <c:forEach var="row" items="${result1.rows}"> 
       <div class="adtitle"> 
        <a href="singlead?idad=<c:out value="${row.idad}"/>"><c:out value="${row.title}"/></a>       
        <p> 
        <c:out value="${row.shortcon}"/> 
        </p> 
       </div> 
      </c:forEach> 

我試圖做到這一點一個當然不起作用的循環。什麼是正確的方法?

+0

你得到任何錯誤? – Sas 2014-12-01 18:21:32

回答

0

嘗試這樣的:

<c:set var="count" value="${fn:length(splitted)}" /> 

<c:if test="${not empty param.titleSearch}"> 
    <sql:query var="result1" dataSource="jdbc/myProba"> 
    SELECT title, shortcon FROM bazaprojekt.ad WHERE 
    title LIKE 
    <c:forEach begin="1" end="${count}" varStatus="i"> 
    ? 
    </c:forEach> 
    <c:forEach begin="1" end="${count}" varStatus="index"> 
     <sql:param value='${splitted[index]}'> 
    </c:forEach> 
    </sql:query> 
</c:if> 

沒有測試的代碼。應工作..:P

0

THX你的答案SAS,我想它會工作,反正我解決它自己,這裏是代碼:

 <c:if test="${not empty param.titleSearch}"> 
      <sql:query var="result1" dataSource="jdbc/myProba"> 
       SELECT idad, title, shortcon FROM bazaprojekt.ad WHERE 
       <c:if test="${fn:length(splitted) == 1}"> 
        <c:forEach items="${splitted}" var="word"> 
         title LIKE '%<c:out value='${word}'/>%' 
        </c:forEach> 
       </c:if> 
       <c:if test="${fn:length(splitted) > 1}"> 
        <c:forEach items="${splitted}" var="word" begin="0" end="${fn:length(splitted) -2}"> 
         title LIKE '%<c:out value='${word}'/>%' OR 
        </c:forEach> 
        <c:forEach items="${splitted}" var="word" begin="${fn:length(splitted) -1}" end="${fn:length(splitted) -1}"> 
         title LIKE '%<c:out value='${word}'/>%' 
        </c:forEach>        
       </c:if>        
      </sql:query> 
     </c:if>