2016-04-28 16 views
0

Ich habe eine boolesche Variable als isABooleanValue im Struts 2 modelebean deklariert und kann den Wert unter Verwendung dieses modelbean.aBooleanValue in jsp sehen.Struts 2: Falscher/falsch geschriebener Getter- und Setter-Name eines Feldes

Getter sieht wie folgt aus

public boolean isABooleanValue(){ 
    return isABooleanValue; 
} 

Setter wie dieser Code

public void setABooleanValue(boolean isABooleanValue){ 
    this.isABooleanValue=isABooleanValue; 
} 

Jsp sieht

<s:property value="modelbean.aBooleanValue" />

kann jemand erklären, wie eine falsche Variablennamen wie folgt zugegriffen werden aus Wertstapel.

bearbeiten

Lösung

in JSP Mit Eigenschaft beruht auf der Methode angegeben Getter basiert. modelbean.aBooleanValue ruft die isABooleanValue()-Methode auf, die in Ihrem Model Bean definiert ist und daher nicht vom privaten Feldnamen abhängig ist.

similar question

Update: - Obwohl dies mag in älteren Version von OGNL aber OGNL Version 3.0.11 (OgnlRuntime), die mit Struts2 gebündelt arbeiten können leere Werte verursachen, wenn Getter und Setter von Feldern angezeigt Namen sind nicht gleich.

+0

Was ist daran falsch? –

+0

'is' ist ein Getter-Präfix für boolean-s. –

+0

versuchen Sie 'modebean.isABooleanValue'. – lxcky

Antwort

2

Wie erwähnt, Aleksandr M der Variablenname hat einen private Modifikator. Es verbirgt die Variable aus Struts OGNL. Wenn OGNL einen Ausdruck auswertet, sucht es immer nach den Objektaccessoren, die für den Namen verfügbar sind. Unter ihnen verwendet es eine, die besser passt, um den Wert für den zu bewertenden Schlüssel zu erhalten.

Wenn ein Variablenname einen public Accessor hat, verwendet er den Namen dieser Variablen. Und wenn es ein Methodenaccessor ist, berechnet es einen Namen aus dem Methd-Namen.

Zum Beispiel, wenn Sie eine Methode haben

public boolean isABooleanValue(){ 
    return isABooleanValue; 
} 

einen Namen mit aBooleanValue und ABooleanValue konnte durch OGNL zugegriffen werden. Es spielt keine Rolle, was es zurückgibt, aber es sollte ein boolean Wert sein.

Es wird nicht empfohlen, solche Methoden einer Aktion zuzuordnen, da unnötige Aktionsaufrufe über OGNL-Aufrufe oder während der Serialisierung auftreten können.