【问题标题】:<c:choose> does not set the expected value based on <ui:repeat var><c:choose> 没有根据 <ui:repeat var> 设置期望值
【发布时间】:2013-06-11 13:02:08
【问题描述】:

我写过这样的代码:

<ui:repeat var="fstDayWk" value="#{calendarBean.date}">
        <c:choose>
            <c:when test="#{fstDayWk == 'Sun'}">
                <c:set var="fstDayWk" value="7"/>
            </c:when>

            <c:when test="#{fstDayWk =='Mon'}">
                <c:set var="fstDayWk" value="1" />
            </c:when>

            <c:when test="#{fstDayWk =='Tue'}">
                <c:set var="fstDayWk" value="2" />
            </c:when>

            <c:when test="#{fstDayWk =='Wed'}">
                <c:set var="fstDayWk" value="3" />
            </c:when>

            <c:when test="#{fstDayWk =='Thu'}">
                <c:set var="fstDayWk" value="4" />
            </c:when>

            <c:when test="#{fstDayWk =='Fri'}">
                <c:set var="fstDayWk" value="5" />
            </c:when>

            <c:when test="#{fstDayWk =='Sat'}">
                <c:set var="fstDayWk" value="6"/>
            </c:when>
            <c:otherwise>
                <c:set var="fstDayWk" value="1" />
            </c:otherwise>
        </c:choose>
</ui:repeat>

但是这里fstDayWk 的赋值总是1。为什么会这样?如何根据 JSF 中的某些条件为某个变量设置值?

【问题讨论】:

    标签: jsf-2 jstl


    【解决方案1】:

    JSTL 标签在视图构建期间运行,此时 JSF 组件树即将基于 XHTML 文件中的 JSF 标签构建/构造。 &lt;ui:repeat&gt; 等 JSF 组件依次在视图渲染期间运行,此时构建的 JSF 组件树即将生成 HTML 代码。

    因此,&lt;c:choose&gt;&lt;ui:repeat&gt; 不会像您对编码所期望的那样同步运行。实际上,首先是在视图构建期间运行的&lt;c:choose&gt;,然后是在视图渲染期间运行的&lt;ui:repeat&gt;。在&lt;c:choose&gt; 运行的那一刻,应该由&lt;ui:repeat&gt; 设置的#{fstDayWk} 在EL 范围内的任何地方都不可用,因此&lt;c:choose&gt; 总是以&lt;c:otherwise&gt; 条件结束。

    如果您使用&lt;c:forEach&gt; 而不是&lt;ui:repeat&gt;,它将起作用。但是,最好在模型中使用 Map&lt;String, Integer&gt; 来维护星期几与其索引之间的映射,这样您就不再需要整个丑陋的 &lt;c:choose&gt; 块了。

    另见:

    【讨论】:

    • 这对Map&lt;String,Integer&gt; 有什么帮助?你能举例说明一下吗?
    • 很难说,因为您没有显示实际需要星期几索引的代码部分。但是像&lt;p&gt;Index of day of week is #{bean.map[fstDayWk]}&lt;/p&gt; 这样的东西是可能的。另见stackoverflow.com/tags/el/info
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-28
    • 2023-04-07
    • 2012-02-29
    • 1970-01-01
    • 2019-09-23
    相关资源
    最近更新 更多