2010-12-29 5 views
0

Ich versuche, dynamisch Session-Objekt in Struts2 Anwendung zu bekommen.Wie bekomme ich dynamisch Session-Objekt in Struts2

<s:if test="%{#session['resToken'].bookingType == 1}"> 

resToken von <s:property value="%{resToken}">.. erhalten werden kann

Aber ich kann <s:property> within <s:if test="">

seine gibt mir Fehler von doppelten Anführungszeichen nicht schreiben ..

org.apache.jasper.JasperException: /WEB-INF/jsp/booking/banquet/guest-Info-View.jsp(150,40) Unterminated &lt;s:if tag 

Antwort

1

Können Sie nicht verwenden ${sessionScope.resToken.bookingType == 1}

1

Wenn ich das richtig lese, dann ist der Wert resToken eigentlich der Name eines Sitzungsattributs, richtig? Also, versuchen Sie etwas wie: ${sessionScope[resToken].bookingType}.

+0

nicht alle Antworten gut genug gelesen. Meine Antwort ist die gleiche wie deine und deine war die erste. – Quaternion

1

Der Versuch, ein <s:property/> Tag innerhalb eines <s:if/> Tags zu setzen, ist nicht der richtige Ansatz. Beide Tags verwenden einen OGNL-Ausdruck als Argument. Wenn also %{resToken} für einen funktioniert, sollte es auch für den anderen funktionieren.

Mit diesem gesagt, %{#session['resToken'].bookingType} sieht richtig aus. Hast du versucht, den Wert auszugeben, um zu sehen, was es ist? Sie können auch %{#session.resToken.bookingType} verwenden. Zuerst bestimmen, dass Sie richtig die Sitzungsvariable verweisen, stellen Sie sicher, dass der Wert wirklich tut == 1.

Oder können Sie JSTL/JSP EL verwenden wie die anderen vorgeschlagen und gehen mit:

// i don't remember off the top of my head if it should be == or eq 
<c:if test="${sessionScope.resToken.bookingType eq 1}"></c:if> 

OGNL Reference

+0

Ich bin nicht sicher, was die äquivalente OGNL-Notation für die EL-Antwort ist, die ich gab, aber ich glaube, dass 'resToken' zuerst ausgewertet werden muss und nicht als ein literaler Eigenschaftsname verwendet wird. – kschneid

+0

Sie können Eigenschaften wie 'sessionScope.resToken.bookingtype' sowohl in EL als auch in OGNL verketten. Sie sollten sich vor Nullen in Acht nehmen, aber die Verkettung wird unterstützt. –

+0

Verstanden. Noch einmal, vielleicht habe ich die Frage falsch interpretiert, aber es gibt einen Unterschied zwischen (EL) 'sessionScope.resToken' und' sessionScope [resToken] '. – kschneid

0

'resToken' ist nicht gleich resToken, das spätere ist eine Variable, von der Sie scheinen, dass die erste eine Zeichenkette ist.

Schreiben Sie einfach:

<s:if test="%{#session[resToken].bookingType == 1}"> 

Wenn dies nicht bitte Tags zur Ausgabe kleine Teile des Ausdrucks verwendet Eigenschaft funktioniert, um zu sehen, was zurückgegeben wird.

0

ich seine Lösung bekommen haben ..

zuerst gesetzt resToken

Prüfung settest Test-11-Test 11