【问题标题】:foreach inside sql:query jstlforeach 里面的 sql:query jstl
【发布时间】:2014-12-01 17:05:44
【问题描述】:

我有 2 个 jsp 文件,在第一个中我有一个表单:

        <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> 

我试图在一个循环中执行此操作,这当然行不通。正确的方法是什么?

【问题讨论】:

  • 你有什么错误吗?

标签: mysql jsp jstl


【解决方案1】:

谢谢你的回答 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>

【讨论】:

    【解决方案2】:

    试试这样:

    <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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-06
      • 1970-01-01
      • 1970-01-01
      • 2013-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多