Prima lettera maiuscola

49 views
Skip to first unread message

Paolo Predonzani

unread,
Oct 30, 2009, 8:41:39 AM10/30/09
to jug-genova
Ciao a tutti
Sto usando struts 2 e devo stampare una property (diciamo "name") in
una jsp. Attualmente uso:
<s:property value="name"/>

Supponiamo che il valore di "name" possa essere maiuscolo o minuscolo
a piacere (p.e., "paolo" o "Paolo" indifferentemente), ma che io lo
voglia stampare con la prima lettera maiuscola (quindi "Paolo").

Qual è il modo migliore di farlo?

All'interno di codice Java chiamerei il metodo statico capitalize
(String) di StringUtils nella libreria commons-lang, ma non so bene
come fare in una jsp.

Grazie.
Ciao


Paolo

Corrado Alesso

unread,
Oct 30, 2009, 8:54:03 AM10/30/09
to jug-g...@googlegroups.com
Potresti usare un tag custom.

Il codice potrebbe essere una cosa tipo (butto giu a mente, da verificare!)

public class CapitalizeTag extends TagSupport {

private String text;

@Override
public int doStartTag() {

JspWriter out = pageContext.getOut();

try {
out.print(StringUtils.capitalize(text));
} catch (IOException e) {
// ...
}

return Tag.SKIP_BODY;

}

@Override
public int doEndTag() {
return Tag.EVAL_PAGE;
}

}

Ora, probabilmente fare un tag custom solo per il capitalize e' overkill,
potresti prendere in considerazione l'ipotesi di creare un tag
"StringUtilsTag" che espone i metodi di StringUtils. Qualcosa tipo:

<custom:string-utils text="abc" method="capitalize" />

e poi nel corpo del doStartTag gestire i vari valori di "method".

Just my two cents.

Ciao!
Corrado


In data 30 ottobre 2009 alle ore 13:41:39, Paolo Predonzani
<paolo.pr...@gmail.com> ha scritto:

Stefano Gamma

unread,
Oct 30, 2009, 9:26:42 AM10/30/09
to jug-g...@googlegroups.com
Perchè semplicemente non usi i CSS per formattare il testo?
http://www.w3schools.com/Css/pr_text_text-transform.asp

Stefano

2009/10/30 Corrado Alesso <co.a...@fastwebnet.it>:

Paolo Predonzani

unread,
Oct 30, 2009, 9:29:00 AM10/30/09
to jug-genova
Grazie. La prenderò in considerazione, anche se al momento mi sembra
un overkill rispetto alla complessità (semplicità) del problema.

Ci sono altri approcci? Qualcosa con l'expression language o OGNL?

Ciao

P
> <paolo.predonz...@gmail.com> ha scritto:

Corrado Alesso

unread,
Oct 30, 2009, 9:36:57 AM10/30/09
to jug-g...@googlegroups.com
Ci sono le JSTL Functions, ma purtroppo capitalize non c'e' (ma con una
combinazione di substring e toUpperCase forse puoi simularla, anche se a
vedersi sara' un po bruttino).

http://java.sun.com/products/jsp/jstl/1.1/docs/tlddocs/fn/tld-summary.html

No ti so dire se c'e' modo di scrivere funzioni custom... :(


In data 30 ottobre 2009 alle ore 14:29:00, Paolo Predonzani
<paolo.pr...@gmail.com> ha scritto:

>

Corrado Alesso

unread,
Oct 30, 2009, 9:52:18 AM10/30/09
to jug-g...@googlegroups.com
Ciao Paolo ho fatto una ricerca veloce e si direbbe che e' possibile
creare una funzione EL custom.

Un blog che spiega come fare, anche se il codice e' formattato male!
http://www.squarebits.com/?p=8

In sostanza, nel .tld definisci una funzione descrivendo, tra le altre
cose, una <function-class> e una <function-signature>.

A questo punto potresti provare a inserire il nome della classe di apache
commons e la signature del metodo che ti interessa e vedere se con
${custom:capitalize('string')} funziona!

Facci sapere.
Corrado


In data 30 ottobre 2009 alle ore 14:29:00, Paolo Predonzani
<paolo.pr...@gmail.com> ha scritto:

>

Nicola Zannino

unread,
Oct 30, 2009, 10:05:22 AM10/30/09
to jug-g...@googlegroups.com
Ciao, puoi usare ognl ecco un tipico esempio :

<s:submit name="submit" value="%{getText('tabellaPaginata.searchButton')}"  cssClass="button" cssStyle="display:inline;" />

getText è un metodo definito nella action , in questo caso vado a leggere l'etichetta per il pulsante definita in un properties ;

oppure :

<s:property value="%{trimAll(key)}"/>

trimAll è un altro metodo definito nella action e key un elemento che processo durante l'iterazione ...

Spero ti sia d'aiuto.

Ciao,
Nicola.

Paolo Predonzani

unread,
Oct 30, 2009, 10:38:52 AM10/30/09
to jug-genova
Vi ringrazio tutti per le idee. Quella di Nicola mi sembra quella più
semplice e l'ho quindi investigata.
Se posso migliorarla, si può evitare di creare un metodo sulla action
e andare direttamente sul metodo statico (di commons-lang).
Questa cosa credo funzioni solo su Struts2/OGNL ma non su EL standard.
La sintassi è contorta:
<s:property value="@org.apache.commons.lang.StringUtils@capitalize
(name)"/>

In più bisogna abilitare un flag in struts.xml:
<constant name="struts.ognl.allowStaticMethodAccess" value="true"/
>


Riferimenti:
http://www.opensymphony.com/ognl/html/LanguageGuide/staticMethods.html
http://issues.apache.org/struts/browse/WW-2160


Grazie di nuovo.
Ciao


Paolo





On Oct 30, 3:05 pm, Nicola Zannino <n.zann...@gmail.com> wrote:
> Ciao, puoi usare ognl ecco un tipico esempio :
>
> <s:submit name="submit" value="%{getText('tabellaPaginata.searchButton')}"
> cssClass="button" cssStyle="display:inline;" />
>
> getText è un metodo definito nella action , in questo caso vado a leggere
> l'etichetta per il pulsante definita in un properties ;
>
> oppure :
>
> <s:property value="%{trimAll(key)}"/>
>
> trimAll è un altro metodo definito nella action e key un elemento che
> processo durante l'iterazione ...
>
> Spero ti sia d'aiuto.
>
> Ciao,
> Nicola.
>
> Il giorno 30 ottobre 2009 14.29, Paolo Predonzani <
> paolo.predonz...@gmail.com> ha scritto:

Stefano Gamma

unread,
Oct 30, 2009, 10:47:12 AM10/30/09
to jug-g...@googlegroups.com
Scusa se mi intrometto, probabilmente sottovaluto il problema, ma
perchè complicarsi tanto la vita ostinandosi ad utilizzare il codice
java?
Creare un tag css per formattare il testo ed ottenere quello che si
vuole, ossia capitalizzare una stringa, è forse troppo semplice o
troppo banale?

Scusa ancora, ma mi incuriosisce capire perchè ti ostini ad inseguire
una soluzione, come tu stesso commenti, contorta!!

Stefano

2009/10/30 Paolo Predonzani <paolo.pr...@gmail.com>:

Nicola Zannino

unread,
Oct 30, 2009, 11:03:17 AM10/30/09
to jug-g...@googlegroups.com
Ciao, premetto che non so se l'obiettivo era semplicemente ottenere il capitalize di una stringa, ma è chiaro che se fosse solo questo sicuramente con il css (text-transform:capitalize) risulta davvero semplice. Ritengo però l'ognl veramente utile,  nel momento in cui (come nel mio caso) bisogna fare controlli particolari su una stringa che vanno al di la delle capacità del css, risulta essere un sistema davvero potente !

Nicola.

Paolo Predonzani

unread,
Oct 30, 2009, 11:09:12 AM10/30/09
to jug-genova
La property "name" che devo stampare è il nome di un report,
potenzialmente composto di più parole.
Es: "report mensile per area"

Utilizzando "text-transform: capitalize" di css il risultato è "Report
Mensile Per Area", cioè ogni parola ottiene la prima lettera
maiuscola.
A me serve maiuscola solo la prima lettera della frase.

Ciao

P

On Oct 30, 3:47 pm, Stefano Gamma <stefano.ga...@gmail.com> wrote:
> Scusa se mi intrometto, probabilmente sottovaluto il problema, ma
> perchè complicarsi tanto la vita ostinandosi ad utilizzare il codice
> java?
> Creare un tag css per formattare il testo ed ottenere quello che si
> vuole, ossia capitalizzare una stringa, è forse troppo semplice o
> troppo banale?
>
> Scusa ancora, ma mi incuriosisce capire perchè ti ostini ad inseguire
> una soluzione, come tu stesso commenti, contorta!!
>
> Stefano
>
> 2009/10/30 Paolo Predonzani <paolo.predonz...@gmail.com>:

Stefano Gamma

unread,
Oct 30, 2009, 11:16:37 AM10/30/09
to jug-g...@googlegroups.com
Ok come immaginavo sottovalutavo il problema ... si può fare con dei
javascript, ma la soluzione cmq non è semplicissima.
Grazie per la risposta :)

Stefano

2009/10/30 Paolo Predonzani <paolo.pr...@gmail.com>:
>

Paolo Predonzani

unread,
Oct 30, 2009, 11:32:53 AM10/30/09
to jug-genova
Di solito mi piace il css. Certe feature avanzate di css mi avevano
"morso" in passato per via della (non) compatibilità fra browser.
Comunque text-transform sembra essere tranquillo da questo punto di
vista.

Ciao e ancora grazie.


Paolo


On Oct 30, 4:16 pm, Stefano Gamma <stefano.ga...@gmail.com> wrote:
> Ok come immaginavo sottovalutavo il problema ... si può fare con dei
> javascript, ma la soluzione cmq non è semplicissima.
> Grazie per la risposta :)
>
> Stefano
>
> 2009/10/30 Paolo Predonzani <paolo.predonz...@gmail.com>:

Andrea Rodriguez

unread,
Oct 31, 2009, 3:02:40 PM10/31/09
to jug-g...@googlegroups.com
ciao,
ci sono alcuni modi, ma dubito che tu possa farlo nel tag property, a
meno di usare il codice java direttamente nella action come hanno già
detto altri

ad es.

<s:set name="capitalName" value="%{name.substring(0,1).toUpperCase() +
name.substring(1).toLowerCase()}" />
<s:property value="#capitalName"/>

...dovrebbe andare

l'OGNL di Struts 2 non é proprio "puro", nel senso che somma
l'OGNL-context di riferimento con il ValueStack ("context") di Struts;
quindi alcune funzioni si possono usare unicamente in alcuni tag ed
altre usano delle logiche o default non proprio immediati ;-)

Andrea



2009/10/30 Paolo Predonzani <paolo.pr...@gmail.com>:
Reply all
Reply to author
Forward
0 new messages