[Struts/JSP] gebruik substring

Pagina: 1
Acties:

  • turkosh
  • Registratie: December 2003
  • Laatst online: 26-04-2025
Ik heb de volgende aanpassingen aan mijn bean:message gedaan om de textMessage te beperken in lengte.
Java Server Page:
1
2
3
4
5
6
7
8
9
10
<c:forEach var="news" varStatus="index" items="${newsList}" 
                     begin="${pageBegin}" end="${pageEnd}">
       <tr>
         <td colspan="3" class="overzicht">[img]"images/icon_vierkantje_gray.gif"[/img]&nbsp;&nbsp;
             <html:link action="/readnewsblock?action=read" paramId="id" paramName="news" paramProperty="id">
              <bean:write name="news" property="${textMessage.substring(0,20)}"/>
             </html:link>
         </td>
       </tr>           
</c:forEach>             


De jsp pagina geeft voor elk element het volgende weer:

nl.pojo.News@11aed57[id=208]

Hoe krijg ik de substring wel correct werkend, zodat de textMessage goed wordt afgebeeld?

Verwijderd

je kunt doorgaans alleen getters aanroepen vanuit EL. dus de methode substring mag domweg niet worden aangeroepen.

  • turkosh
  • Registratie: December 2003
  • Laatst online: 26-04-2025
En ik heb dus geen getters voor textMessage in de Form. Dat betekent dus helemaal geen substring mogelijkheid?

  • joopst
  • Registratie: Maart 2005
  • Laatst online: 01-10-2024
ik kan geen struts, maar het ziet er uit als xpath/xsl enzo ..
wellicht biedt de xpath functie substring je uitkomst ?

  • turkosh
  • Registratie: December 2003
  • Laatst online: 26-04-2025
thanks, maar die heeft hetzelfde uitwerking als mijn post. (objectnaam en geheugenadres i.p.v. de waarde) :'(

Verwijderd

turkosh schreef op vrijdag 14 oktober 2005 @ 12:13:
En ik heb dus geen getters voor textMessage in de Form. Dat betekent dus helemaal geen substring mogelijkheid?
Waarschijnlijk heb jij op je bean de methode "public String getTextMessage()", dan gaat iig de property textMessage werken. Maar een methode als substring kun je domweg niet aanroepen. Verder ben ik er meer voorstander van om een extra property toe te voegen op je bean (zoals bijvoorbeerbeeld shortTextMessage) waar al een reeds verkorte String in staat. Dit gewoon puur om view logica te beperken.

  • turkosh
  • Registratie: December 2003
  • Laatst online: 26-04-2025
getTextMessage is een onderdeel van de POJO (News).
In dit geval wordt dus uit de NewsList dat gevuld is met News POJOs property textMessage gepakt (d.m.v. getTextMessage van de POJO). Wat jij suggereert is dus een extra getter in de FormBean voor de TextMessage?
de FormBean zelf weet initieel niet wat er in de NewsList zit, dus hoe krijg ik het dan voor elkaar dat er op de gevulde Lijst met Pojos de getTextMessage moet worden aangeroepen?

Verwijderd

Nee ik suggereer een extra property op News.

  • Cuball
  • Registratie: Mei 2002
  • Laatst online: 10:20
Java:
1
2
3
4
5
6
7
8
9
10
11
        public class News {
            private String textMessage;
            
            public String getTextMessage() {
                return textMessage;
            }
            
            public String getShortTextMessage() {
                return textMessage.substring(0,20);
            }
        }


volgens mij de beste manier... je kan natuurlijk ook een eigen custom tag maken ipv de bean:write tag die dan adhv een attribute een maximum lengte uitschrijft... maar voor eenmalig gebruik zou ik het zo doen

"Live as if you were to die tomorrow. Learn as if you were to live forever"


Verwijderd

deze zou ik aanraden:

http://jakarta.apache.org...index.html#truncateNicely

maar ik weet niet wat je precies wil truncaten. Maar wij gebruiken dit en "appendToEnd" is dan een ".." link die een popup opent met het geheel (voor een grote commentaar) bijvoorbeeld.
Ze biedt heel veel mogelijkheden en jij krijgt geen substring als

"Ze biedt heel veel mo...."

als er geen truncate nodig is wordt die appendToEnd ook niet toegevoegd, uitermate handig aangezien je dan ook geen popup wilt

[edit]
en in JSTL zit er ook ene substring in de function (fn) taglib

http://java.sun.com/j2ee/...al/doc/JSTL8.html#wp84680

voorbeeld:

http://adiguba.developpez.../jsp/jstl/#L-fn:substring
(haal je beste Frans maar boven :))

[ Voor 41% gewijzigd door Verwijderd op 14-10-2005 13:36 ]


Verwijderd

Dat is wel voor de laatste versies, plus als je op een nette manier view logica kunt beperken is dat bijna altijd een aanrader. Het maakt gewoon je view onoverzichtelijk aangezien je feitelijk enkel wat informatie wilt weergeven. Nadeel van een truncate methode is dat de feitelijk lengte altijd verschillend is aangezien er niet met monospace karakters wordt gwerkt.

Zorg dus liever dat je (x)html dit netjes kan weergeven en niet struikelt over een paar pixels meer of minder.

Verwijderd

Verwijderd schreef op vrijdag 14 oktober 2005 @ 12:28:
[...]

Waarschijnlijk heb jij op je bean de methode "public String getTextMessage()", dan gaat iig de property textMessage werken. Maar een methode als substring kun je domweg niet aanroepen. Verder ben ik er meer voorstander van om een extra property toe te voegen op je bean (zoals bijvoorbeerbeeld shortTextMessage) waar al een reeds verkorte String in staat. Dit gewoon puur om view logica te beperken.
Is dat niet net de bedoeling van JSP? Ik ben het echt niet eens met een extra propertie die énkel voor de presentation laag dient.

Stel dat News een Hibernate object is, dan moet je dat verzwaren met een getShortMessage (in je domain objects) terwijl het eigenlijk puur presentatie is, je bepaalt in je domain laag dus hoe de short message is (het aantal karakters, ..) wat eigenlijk view logic is, dus JSP

  • Cuball
  • Registratie: Mei 2002
  • Laatst online: 10:20
Verwijderd schreef op vrijdag 14 oktober 2005 @ 14:19:
[...]
Stel dat News een Hibernate object is, dan moet je dat verzwaren met een getShortMessage (in je domain objects) terwijl het eigenlijk puur presentatie is, je bepaalt in je domain laag dus hoe de short message is (het aantal karakters, ..) wat eigenlijk view logic is, dus JSP
Ik doe het zelf ook zo niet meer... maar ik heb er niet echt een probleem mee, je voegt tenslotte enkel een getter methode toe, en geen property met een setter methode, dus je domeinobject veranderd niet...

en ja vervuilen... voor die ene keer dat je het maar zou gebruiken dan zou ik er niet van wakker liggen... maar als je inderdaad voor elke property een extra methode moet schrijven om hem op het scherm te tonen dan zoek je beter naar een andere manier van werken. Ik denk hier terug aan eigen JSP tags die dit allemaal netjes afhandelen en mooi op het scherm uitschrijven

"Live as if you were to die tomorrow. Learn as if you were to live forever"


Verwijderd

Verwijderd schreef op vrijdag 14 oktober 2005 @ 14:19:
Is dat niet net de bedoeling van JSP? Ik ben het echt niet eens met een extra propertie die énkel voor de presentation laag dient.

Stel dat News een Hibernate object is, dan moet je dat verzwaren met een getShortMessage (in je domain objects) terwijl het eigenlijk puur presentatie is, je bepaalt in je domain laag dus hoe de short message is (het aantal karakters, ..) wat eigenlijk view logic is, dus JSP
Het is bediscussierbaar, dat zeker. Voor hibernate maakt het geen donder uit, de property wordt niet gemapped. Ik ben van mening dat je jsp zo leesbaar mogelijk moet blijven en zich dus enkel moet beperken tot het itereren over de objecten die je wilt weergeven. Al het andere behoort wat mij betreft toe aan een controller die dergelijk voorbereidend werk verzorgt. En in dit specifieke geval is het wat mij betreft een property die duidelijk bij een newsitem hoort.

  • turkosh
  • Registratie: December 2003
  • Laatst online: 26-04-2025
Thanks _/-\o_ , dat was wat ik nodig had. Ik vind het een beetje overbodig om voor de textMessage een aparte getter voor samen te stellen die maar een gedeelte van de text moet laten zien.
Ik denk voor een lijstje bestaande uit 10 textMessages per pagina, het bewerken in de view wel zal meevallen.

Verwijderd

turkosh schreef op vrijdag 14 oktober 2005 @ 15:27:
Ik denk voor een lijstje bestaande uit 10 textMessages per pagina, het bewerken in de view wel zal meevallen.
Absoluut dat het meevalt. Het is ook enkel een kwestie van smaak. Bedenk alleen wel dat een hele hoop van dit soort kleine dingetjes in de view in een ongelooflijk groot jsp(x) bestand kan resulteren.

  • matthijsln
  • Registratie: Augustus 2002
  • Laatst online: 28-04 15:07
Aangezien je toch JSTL gebruikt:

Java Server Page:
1
2
3
4
5
6
7
8
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<c:set var="maxLabelLength" value="20"/>

<c:set var="label" value="${news.textMessage}"/>
<c:if test="${fn:length(label) gt maxLabelLength}">
    <c:set var="label" value="${fn:trim(fn:substring(label, 0, maxLabelLength-3))}..."/>
</c:if>
<c:out value="${label}"/>


Wat alleen wel jammer is dat met variabele lengte fonts het niet allemaal op dezelfde breedte wordt afgebroken, maar dat hou je altijd natuurlijk (of zijn daar nog HTML/CSS/JS trucjes voor?)
Pagina: 1