You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by lu...@apache.org on 2009/11/27 00:34:18 UTC
svn commit: r884722 -
/myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/tag/jstl/fn/JstlFunction.java
Author: lu4242
Date: Thu Nov 26 23:34:18 2009
New Revision: 884722
URL: http://svn.apache.org/viewvc?rev=884722&view=rev
Log:
MYFACES-2425 JSTL Functions returns null instead ""
Modified:
myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/tag/jstl/fn/JstlFunction.java
Modified: myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/tag/jstl/fn/JstlFunction.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/tag/jstl/fn/JstlFunction.java?rev=884722&r1=884721&r2=884722&view=diff
==============================================================================
--- myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/tag/jstl/fn/JstlFunction.java (original)
+++ myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/tag/jstl/fn/JstlFunction.java Thu Nov 26 23:34:18 2009
@@ -21,6 +21,7 @@
import java.lang.reflect.Array;
import java.util.Collection;
import java.util.Map;
+import java.util.StringTokenizer;
/**
* Implementations of JSTL Functions
@@ -68,13 +69,75 @@
{
if (value == null)
{
- return null;
+ return "";
+ }
+ if (value.length() == 0)
+ {
+ return "";
}
- value = value.replaceAll("<", "<");
- value = value.replaceAll(">", ">");
-
- return value;
+ StringBuilder sb = null; //create later on demand
+ String app;
+ char c;
+ for (int i = 0; i < value.length (); ++i)
+ {
+ app = null;
+ c = value.charAt(i);
+
+ // All characters before letters
+ if ((int)c < 0x41)
+ {
+ switch (c)
+ {
+ case '<' : app = "<"; break; //<
+ case '>' : app = ">"; break; //>
+ case '\'': app = "'"; break; //'
+ case '"' : app = """; break; //"
+ case '&' : //&
+ if (i+4 < value.length() )
+ {
+ if ('a' == value.charAt(i+1) &&
+ 'm' == value.charAt(i+2) &&
+ 'p' == value.charAt(i+3) &&
+ ';' == value.charAt(i+4))
+ {
+ //Skip
+ }
+ else
+ {
+ app = "&";
+ }
+ }
+ else
+ {
+ app = "&";
+ }
+ break;
+ }
+ }
+ if (app != null)
+ {
+ if (sb == null)
+ {
+ sb = new StringBuilder(value.substring(0, i));
+ }
+ sb.append(app);
+ } else {
+ if (sb != null)
+ {
+ sb.append(c);
+ }
+ }
+ }
+
+ if (sb == null)
+ {
+ return value;
+ }
+ else
+ {
+ return sb.toString();
+ }
}
public static int indexOf(String name, String searchString)
@@ -91,7 +154,7 @@
{
if (a == null || delim == null)
{
- return null;
+ return "";
}
if (a.length == 0)
@@ -144,9 +207,25 @@
public static String replace(String value, String a, String b)
{
- if (value == null || a == null || b == null)
+ if (value == null)
+ {
+ return "";
+ }
+ if (value.length() == 0)
{
- return null;
+ return "";
+ }
+ if (a == null)
+ {
+ return value;
+ }
+ if (a.length() == 0)
+ {
+ return value;
+ }
+ if (b == null)
+ {
+ b = "";
}
return value.replaceAll(a, b);
@@ -154,12 +233,36 @@
public static String[] split(String value, String d)
{
- if (value == null || d == null)
+ if (value == null)
{
- return null;
+ return new String[]{""};
}
+ if (value.length() == 0)
+ {
+ return new String[]{""};
+ }
+ if (d == null)
+ {
+ return new String[]{value};
+ }
+ if (d.length() == 0)
+ {
+ return new String[]{value};
+ }
- return value.split(d);
+ StringTokenizer st = new StringTokenizer(value, d);
+ int numTokens = st.countTokens();
+ if (numTokens == 0)
+ {
+ return new String[]{value};
+ }
+ String[] array = new String[numTokens];
+ int i = 0;
+ while (st.hasMoreTokens()){
+ array[i] = st.nextToken();
+ i++;
+ }
+ return array;
}
public static boolean startsWith(String value, String p)
@@ -176,7 +279,27 @@
{
if (v == null)
{
- return null;
+ return "";
+ }
+ if (v.length() == 0)
+ {
+ return "";
+ }
+ if (s >= v.length())
+ {
+ return "";
+ }
+ if (s < 0)
+ {
+ s = 0;
+ }
+ if (e >= v.length())
+ {
+ e = v.length();
+ }
+ if (e < s)
+ {
+ return "";
}
return v.substring(s, e);
@@ -186,7 +309,11 @@
{
if (v == null)
{
- return null;
+ return "";
+ }
+ if (v.length() == 0)
+ {
+ return "";
}
int i = v.indexOf(p);
@@ -195,14 +322,18 @@
return v.substring(i + p.length());
}
- return null;
+ return "";
}
public static String substringBefore(String v, String s)
{
if (v == null)
{
- return null;
+ return "";
+ }
+ if (v.length() == 0)
+ {
+ return "";
}
int i = v.indexOf(s);
@@ -211,14 +342,18 @@
return v.substring(0, i);
}
- return null;
+ return "";
}
public static String toLowerCase(String v)
{
if (v == null)
{
- return null;
+ return "";
+ }
+ if (v.length() == 0)
+ {
+ return "";
}
return v.toLowerCase();
@@ -228,7 +363,11 @@
{
if (v == null)
{
- return null;
+ return "";
+ }
+ if (v.length() == 0)
+ {
+ return "";
}
return v.toUpperCase();
@@ -238,9 +377,12 @@
{
if (v == null)
{
- return null;
+ return "";
+ }
+ if (v.length() == 0)
+ {
+ return "";
}
-
return v.trim();
}