2015-04-27 22 views
6

Voglio confrontare due stringhe per decidere se la prima stringa è "più piccola" della seconda stringa.freemarker - confronto stringa - operatore non consentito

<#if name1 <= name2> 
.... 
</#if> 

Errore:

Can't use operator "<=" on string values. 

si può fare in FreeMarker? È possibile chiamare il metodo String.compareTo in un modello?

+0

Se sono oggetti String, si dovrebbe usare 'String.compareTo()'. [Questo] (http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#compareTo (java.lang.String)) potrebbe aiutare. – mtyurt

+0

Entrambi sono in effetti oggetti String. Come posso chiamare il metodo 'compareTo' in FreeMarker? –

+1

dipende anche da ciò che consideri "più piccolo". Le stringhe non sono valori numerici. – Stultuske

risposta

0

In FreeMarker è possibile utilizzare == per confrontare Strings, ma a seconda del significato di <= per voi, è possibile utilizzare BuiltIn for strings per confrontare la lenght, la content, o quello che vi serve.

UPDATE: non avete costruito nel metodo per compare lexicographicallyString in FreeMarker, in modo da avere 2 opzioni:

  1. Crea il tuo metodo per confrontare i Strings con built-in funzioni, l'iterazione di archi e confrontando char per char.
  2. creare un comparatore Java come @meskobalazs suggeriscono
+1

Quale funzione? –

+0

cosa intendi con '<='? –

+0

La definizione di 'String.compareTo()' è OK per il mio caso. –

2

Se si intende la lunghezza, è possibile utilizzare il length built-in, ad esempio:

<#if string?length gt 0> 

Se si intende utilizzare un confronto personalizzato e si stiamo usando Struts2, puoi semplicemente invocare un metodo di azione per questo, supponiamo tu abbia un metodo di confronto:

public boolean compare(String str1, String str2) { ... } 

allora si può fare questo:

<#if action.compare(str1, str2) gt 0> 
+0

Come trova il motore di FreeMarker la funzione 'compare'? Dove dovrebbe essere implementato? Deve essere 'statico'? –

+0

Bene, qui ho pensato che tu stia usando Struts2. Se questo non è il caso, non lo farà. Se lo fai, deve essere un metodo di istanza pubblico di un'azione Struts2. – meskobalazs

+0

No, non sto utilizzando Struts2. –