2

我无法弄清楚为什么这不起作用。除非c:if是真的,否则下面的代码片段基本上可以正常工作。

如果 if 语句为真,则应手动将 clientId 设置为 1。这确实有效,但由于某种原因,它不会获取 clientProps。

如果从会话变量“用户”中获取 ClientId=1,它确实可以正常工作。所以 clientProps 应该在点 1 有一些东西。有什么线索吗?

<c:set var="clientId" value="${sessionScope['user'].client.clientId}"/>
<c:if test="${empty sessionScope['user'].client.clientId}">
    True
    <c:set var="clientId" value="1" />
</c:if>

<c:set var="clientProperties" value="${clientProps[clientId]}"/>
<c:set var="clientLogo" value="${clientProperties.clientLogo}"/>
<c:set var="clientURL" value="${clientProperties.clientWebURL}" />
clientId = ${clientId}
clientLogo = ${clientLogo}
clientURL = ${clientURL}

如果用户对象存在,则结果:

clientId = 1 clientLogo = /images/logos/Logo1.png clientURL = http://www.xxx.xxx

用户对象不存在时的结果:

True clientId = 1 clientLogo = clientURL =

4

1 回答 1

4
<c:set var="clientId" value="1" />

这将其设置为Stringmap 键显然是Long.

您需要将其设置为 a Long

<c:set var="clientId" value="${1}" />

EL 中的数字被隐式处理为Long,这就是上述方法有效的原因。

于 2012-05-30T14:25:02.057 回答