用JSF EL列出请求头名的任何方法 - 没有支持bean?

Cra*_*ver 2 jsf el

有没有办法使用JSF EL(Java EE 7)列出所有请求的标题名称和2列表中的相应值,而不引入支持bean?我可以这样做,如果我创建一个bean并从EL访问它,所以我确实有一个方法到最后 - 但我想弄清楚的是,它是否可以完全用"开箱即用"完成EL."这是不可能的"将是一个很好的答案 - 我还在学习.

我想是这样的:

  <table>
    <ui:repeat value="#{request.getHeaderNames()}" var="hdr">
      <tr>
        <td>#{hdr}</td>
        <td>#{headerValues[hdr]}</td>
      </tr>
    </ui:repeat>
  </table>
Run Code Online (Sandbox Code Playgroud)

但这给出了一个1行的表,如下所示:

org.apache.catalina.util.Enumerator@2dbf763b    [Ljava.lang.String;@74eb32f3
Run Code Online (Sandbox Code Playgroud)

我怀疑因为request.getHeaderNames()给一个普查员而不是某种ui:repeat想要的列表,这种方法根本不起作用,我需要做一些根本不同的事情.

Bal*_*usC 5

你可以迭代#{headerValues}自己.你只需要JSTL <c:forEach>,

<dl>
    <c:forEach items="#{headerValues}" var="entry">
        <dt>#{entry.key}</dt>
        <c:forEach items="#{entry.value}" var="headerValue">
            <dd>#{headerValue}</dd>
        </c:forEach>
    </c:forEach>
</dl>
Run Code Online (Sandbox Code Playgroud)

或利用EL 2.2功能转换MapEntry[]如下,如<ui:repeat>不支持地图,但只有列表和数组:

<dl>
    <ui:repeat value="#{headerValues.entrySet().toArray()}" var="entry">
        <dt>#{entry.key}</dt>
        <ui:repeat value="#{entry.value}" var="headerValue">
            <dd>#{headerValue}</dd>
        </ui:repeat>
    </ui:repeat>
</dl>
Run Code Online (Sandbox Code Playgroud)

请注意,每个值#{headerValues}代表一个String[],所以我也为你修复了这个,并使用了适当的数据结构.