Avatar billede decrypto Nybegynder
03. december 2005 - 21:33 Der er 43 kommentarer

Speciel løkke i JSTL, hvordan?

Det drejer sig simpelthen om at lave en løkke på, der skal løbe nøjagtig 13 gange.

Undervejs i disse genneløb, skal jeg matche noget tekst med et datostempel (fx '10:00' matche i '2005-11-05 10:00' (her er der match)). Hvis ikke så viser jeg bare 10:00 som ledigt.

Jeg har meget meget lidt erfaring med jstl, hvis der er nogen, der ved noget eller har et eksempel, så meldt gerne tilbage her.
Avatar billede decrypto Nybegynder
03. december 2005 - 21:34 #1
Er der nogen der har nogle forslag?
Avatar billede arne_v Ekspert
03. december 2005 - 21:39 #2
<c:forEach var="i" start="1" end="13">
...
</c:forEach>

må være selve løkken
Avatar billede decrypto Nybegynder
03. december 2005 - 21:42 #3
Ok, vi arbejder os stille og roligt derhenne af :o)
Avatar billede decrypto Nybegynder
03. december 2005 - 21:44 #4
aaahhh den bliver svær....lad mig lige tænke mig om....
Avatar billede decrypto Nybegynder
03. december 2005 - 21:56 #5
Hele udfordringen er at jeg har en hel masse tider startende fra:

07:00
08:00
...
20:00

Jeg skal løbe en løkke igennem fra kl 7 - 20 :o).
For hver af disse tider skal jeg matche den igennem arrays af af tidstempler.

Så det vil betyder en løkke til at løbe fra kl.07:00 til kl.20:00 og en løkke indeni der simpelhen mather tiden med tidstemplerne i et array af dem.

Hvon gør man det???
Avatar billede decrypto Nybegynder
03. december 2005 - 22:00 #6
i jstl? Løkke i løkke....
Avatar billede arne_v Ekspert
03. december 2005 - 22:03 #7
hm

jeg prøver lige at brygge på noget
Avatar billede decrypto Nybegynder
03. december 2005 - 22:11 #8
det lyder godt... jeg prøver også lige, selvom jeg tror du er hurigst.
Avatar billede arne_v Ekspert
03. december 2005 - 22:32 #9
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page import="java.util.*" %>
<%
// just for test
List data = new ArrayList();
data.add("16:00");
data.add("17:00");
data.add("18:00");
request.setAttribute("data", data);
%>
<c:forEach var="i" begin="7" end="20">
<c:set var="ti" value="${i}:00"/>
<c:out value="${ti}"/>
<c:forEach var="t" items="${data}">
<c:if test="${ti==t}">
****
</c:if>
</c:forEach>
<br>
</c:forEach>
Avatar billede arne_v Ekspert
03. december 2005 - 22:37 #10
7:00
8:00
9:00
10:00
11:00
12:00
13:00
14:00
15:00
16:00 ****
17:00 ****
18:00 ****
19:00
20:00
Avatar billede decrypto Nybegynder
03. december 2005 - 22:38 #11
ohhh virker det?
Avatar billede decrypto Nybegynder
03. december 2005 - 22:38 #12
hmmm det ser ud som om noget af det er jsp?
Avatar billede decrypto Nybegynder
03. december 2005 - 22:39 #13
nååh det bare dit arraylist der er i jsp, fair nok.
Avatar billede decrypto Nybegynder
03. december 2005 - 22:42 #14
Prøver liiiiige.
Avatar billede decrypto Nybegynder
03. december 2005 - 22:43 #15
Ahhh næsten ved at være der.

Hvordan får jeg min <fmt:formatDate value="${inspections.startTime}" pattern="HH:mm" /> ind istedet for dit t i <c:if test="${ti==t}">

?????
Avatar billede decrypto Nybegynder
03. december 2005 - 22:44 #16
Ellers skal denne ${inspections.startTime} formateres i JSTL til HH:mm.....men how?
Avatar billede arne_v Ekspert
03. december 2005 - 22:46 #17
det virker

min ArrayList er bare en til test

din ArrayList kommer sikkert et helt andset sted fra

men bare du får den gemt i request så er det OK
Avatar billede decrypto Nybegynder
03. december 2005 - 22:46 #18
...men hvad med det sidste???
Avatar billede arne_v Ekspert
03. december 2005 - 22:51 #19
nu mistede jeg tråden
Avatar billede decrypto Nybegynder
03. december 2005 - 23:05 #20
Det jeg prøver er følgende:

<c:forEach var="i" begin="7" end="20">
  <c:set var="ti" value="${i}:00"/>
  <c:forEach var="inspections" items="${requestScope.arrayOfInspections}">
    <c:if test="${ti==${inspections.startTime}}">
    ****
    </c:if>
  </c:forEach>
</c:forEach>
Avatar billede decrypto Nybegynder
03. december 2005 - 23:06 #21
${inspections.startTime} er et timestamp, så det skal jeg jo klippe ned til jeg bare har tiden fx. 12:00 som vi så kan lave en if på.
Avatar billede decrypto Nybegynder
03. december 2005 - 23:07 #22
Håber du er tilbage på tråden :o)
Avatar billede arne_v Ekspert
03. december 2005 - 23:08 #23
prøv:

<c:if test="${ti==inspections.startTime}">
Avatar billede decrypto Nybegynder
03. december 2005 - 23:10 #24
vi prøver......
Avatar billede decrypto Nybegynder
03. december 2005 - 23:26 #25
Er der ikke noget der hedder <c:else></c:else>????

<c:forEach var="i" begin="7" end="20">
  <c:set var="ti" value="${i}:00"/>
  <c:forEach var="inspections" items="${requestScope.arrayOfInspections}">
    <c:if test="${ti==${inspections.startTime}}">
    ****
    </c:if>
    <c:else>
    ####
    </c:else>
  </c:forEach>
</c:forEach>

Det kan jeg nemlig ikke....
Avatar billede arne_v Ekspert
03. december 2005 - 23:29 #26
nej

så skal du bruge choose, when og otherwise
Avatar billede arne_v Ekspert
03. december 2005 - 23:29 #27
Avatar billede decrypto Nybegynder
03. december 2005 - 23:30 #28
okay, prøver det...
Avatar billede decrypto Nybegynder
03. december 2005 - 23:33 #29
Koden blev til det her....men det virker ikke helt.....

<c:choose>
                            <c:when test="${!empty requestScope.arrayOfInspections}">
                                <c:forEach var="i" begin="7" end="20">
                                  <c:set var="ti" value="${i}:00"/>
                                  <c:forEach var="inspections" items="${requestScope.arrayOfInspections}">
                                      <c:choose>
                                        <c:when test="${ti==inspections.startTime}">
                                        <tr>
                                            <td width="15" align="left" class="timeslotText">${ti}</td>
                                            <td  width="200" class="inspectionTimeSlotReserved">&nbsp;</td>
                                            <td>&nbsp;</td>
                                        </tr>
                                        </c:when>
                                        <c:otherwise>
                                        <tr>
                                            <td width="15" align="left" class="timeslotText">${ti}</td>
                                            <td  width="200" class="inspectionTimeSlotFree">&nbsp;</td>
                                            <td><a href="#" onclick="doInsertTimeSlot('${ti}');"  title="Send inspection request"><-</a></td>
                                        </tr>
                                        </c:otherwise>
                                      </c:choose>
                                  </c:forEach>
                                </c:forEach>   
                            </c:when>
                        </c:choose>
Avatar billede decrypto Nybegynder
03. december 2005 - 23:35 #30
Jeg tror ikke denne her virker ->
<c:when test="${ti==inspections.startTime}">

da ti jo fx er (10:00) og  inspections.startTime} er et tidstempel (2005-11-05 10:00)
Avatar billede decrypto Nybegynder
03. december 2005 - 23:38 #31
Jeg paster lige koden ind igen, da det første blev grimt pastet ind.

<c:choose>
    <c:when test="${!empty requestScope.arrayOfInspections}">
        <c:forEach var="i" begin="7" end="20">
        <c:set var="ti" value="${i}:00"/>
          <c:forEach var="inspections" items="${requestScope.arrayOfInspections}">
            <c:choose>
                <c:when test="${ti==inspections.startTime}">
                    <tr>
                        <td width="15" align="left" class="timeslotText">${ti}</td>
                        <td  width="200" class="inspectionTimeSlotReserved">&nbsp;</td>
                        <td>&nbsp;</td>
                    </tr>
                </c:when>
                <c:otherwise>
                    <tr>
                        <td width="15" align="left" class="timeslotText">${ti}</td>
                        <td  width="200" class="inspectionTimeSlotFree">&nbsp;</td>
                        <td><a href="#" onclick="doInsertTimeSlot('${ti}');"  title="Send inspection request"><-</a></td>
                    </tr>
                </c:otherwise>
              </c:choose>
          </c:forEach>
        </c:forEach>   
    </c:when>
</c:choose>
Avatar billede arne_v Ekspert
03. december 2005 - 23:47 #32
prøv og formater din start tid til en String med en df.format inden du sammenligner
Avatar billede decrypto Nybegynder
03. december 2005 - 23:51 #33
Jeg tror ikke jeg må så meget i min mainkode. Jeg skal 'bare' ha'  {$inspections.startTime} klippet lidt til kun at have tiden i sig. Man må kunne formatere en dato i jstl...
Avatar billede decrypto Nybegynder
03. december 2005 - 23:54 #34
kan jeg ikke på en eller anden måde bruge <fmt:formatDate "${inspections.startTime}" pattern="HH:mm" /> inde i min <c:when test="${ti==inspections.startTime}"> ???

Kan man ikke erklære en variable af en eller anden art og bruge den ?????
Avatar billede decrypto Nybegynder
04. december 2005 - 00:02 #35
Hvordan negerer man <c:if test="${reserved==ti}"> ?????
Avatar billede decrypto Nybegynder
04. december 2005 - 00:17 #36
Nåh ja...<c:if test="${!reserved==ti}">
Avatar billede arne_v Ekspert
04. december 2005 - 00:20 #37
prøv med !=
Avatar billede decrypto Nybegynder
04. december 2005 - 00:27 #38
Kan du ikke prøve at smide tidsstempler istedet for tider i dit arrayList, og prøve at få det til at virke????

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page import="java.util.*" %>
<%
// just for test
List data = new ArrayList();
data.add("2005-11-05 16:00");
data.add("2005-11-05 17:00");
data.add("2005-11-05 18:00");
request.setAttribute("data", data);
%>
<c:forEach var="i" begin="7" end="20">
<c:set var="ti" value="${i}:00"/>
<c:out value="${ti}"/>
<c:forEach var="t" items="${data}">
<c:if test="${ti==t}">
****
</c:if>
</c:forEach>
<br>
</c:forEach>
Avatar billede arne_v Ekspert
04. december 2005 - 00:52 #39
hvad siger du til:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<%@ page import="java.util.*" %>
<%
// just for test
List data = new ArrayList();
data.add("2005-11-05 16:00");
data.add("2005-11-05 17:00");
data.add("2005-11-05 18:00");
request.setAttribute("data", data);
%>
<c:forEach var="i" begin="7" end="20">
<c:set var="ti" value=" ${i}:00"/>
<c:out value="${ti}"/>
<c:forEach var="t" items="${data}">
<c:if test="${fn:endsWith(t,ti)}">
****
</c:if>
</c:forEach>
<br>
</c:forEach>
Avatar billede arne_v Ekspert
04. december 2005 - 00:52 #40
der er ikke ret mange prædefinerede funktioner i EL

men du kan lavce dine egne, så kan du få det præcis som du vil
Avatar billede decrypto Nybegynder
04. december 2005 - 01:02 #41
Vi prøver liiiige....
Avatar billede arne_v Ekspert
31. december 2005 - 14:13 #42
virkede det ?
Avatar billede arne_v Ekspert
26. november 2007 - 21:57 #43
??
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester