2015-04-27 12 views
6

Chcę porównać dwa ciągi, aby zdecydować, czy pierwszy ciąg jest "mniejszy" niż drugi ciąg.freemarker - porównanie ciągów - operator niedozwolony

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

Błąd:

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

Można to zrobić w FreeMarker? Czy można wywołać metodę String.compareTo w szablonie?

+0

Jeśli są obiekty String, należy użyć 'String.compareTo()'. [This] (http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#compareTo (java.lang.String)) może pomóc. – mtyurt

+0

Obie są rzeczywiście obiektami typu String. Jak mogę wywołać metodę 'compareTo' w FreeMarker? –

+1

zależy również od tego, co uważasz za "mniejsze". Ciągi nie są wartościami liczbowymi. – Stultuske

Odpowiedz

0

W FreeMarker można użyć == porównać Strings, ale w zależności od znaczenia <= dla Ciebie, można użyć BuiltIn for strings porównanie lenght, z content lub czego potrzebujesz.

UPDATE: nie mają wbudowane metody compare lexicographicallyString w FreeMarker, więc masz 2 opcje:

  1. stworzyć swój własny sposób porównać Strings z built-in funkcje, iteracja na smyczki i porównując char przez char.
  2. stworzyć Java porównawczy jak @meskobalazs sugerują
+1

Jaką funkcję? –

+0

co masz na myśli z '<='? –

+0

Definicja 'String.compareTo()' jest OK dla mojego przypadku. –

2

Jeśli masz na myśli długość, można użyć length wbudowany, na przykład:

<#if string?length gt 0> 

Jeśli masz na myśli, aby użyć porównania niestandardowe i Ty używają Struts2, możesz po prostu wywołać metodę działania, załóżmy, że masz metodę porównania:

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

następnie można to zrobić:

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

W jaki sposób silnik FreeMarker znajduje funkcję "porównywania"? Gdzie powinien zostać wdrożony? Czy musi to być "static"? –

+0

No cóż, tutaj założyłem, że używasz Struts2. Jeśli tak nie jest, nie będzie. Jeśli tak, to musi być metoda instancji publicznej działania Struts2. – meskobalazs

+0

Nie Nie używam Struts2. –

Powiązane problemy