Struts2 passing variables case

but Struts2 cannot receive this kind of camelcase style (just first one char lower and second upper case)

This is actually not true. Struts2 can receive any variable name that comply JavaBeans spec. But apart from the Java implementation of this spec. (if you want to learn more about JavaBeans, see this post What is a JavaBean exactly?), it’s using its own implementation. Because Struts2 uses OGNL to access bean’s properties you should know what a “property” is according OGNL language.

What is a property? Roughly, an OGNL property is the same as a bean property, which means that a pair of get/set methods, or alternatively a field, defines a property (the full story is a bit more complicated, since properties differ for different kinds of objects; see below for a full explanation).

And the full explanation you can find here: Referring to Properties.

I will not dig into details how OGNL treats properties of the object but it should follow the contract for PropertyAccessor. There’s a lot of implementations for different kind of “properties”. The one that OGNL uses for objects is ObjectPropertyAccessor. Here’s a merely description what it does:

Implementation of PropertyAccessor that uses reflection on the target object’s class to find a field or a pair of set/get methods with the given property name.

How it’s doing it you can find via browsing the source code. I’ll just say that it’s capitalizing the the first letter of the property name before using it with get/set method prefix. So, you have asked

How can I make this to work?

Change the method signature of the getter/setter for properties

public String getXTrace() {
    return xTrace;
}

public void setXTrace(String xTrace) {
    this.xTrace = xTrace;
}

UPDATE:

Since OGNL 3.0.11 the single lowercase letter is not uppercased.

Leave a Comment