【问题标题】:Using variables in JSF code在 JSF 代码中使用变量
【发布时间】:2013-12-12 13:35:50
【问题描述】:

我正在努力将参数 playerName 和 clubName 发送到 forEach 循环。它们是用 commandButton 正确发送的,所以我确信它们中有值。但似乎他们没有及时评估 forEach ???如您所见,变量未保存在 bean 中。

    <h:panelGrid columns="2">
        <h:outputText value="Spelare"></h:outputText>
        <h:selectOneMenu id="playerMenu" value="#{playerName}">
            <f:selectItems value="#{serviceHCP.allPlayers}" />
        </h:selectOneMenu>
        <h:outputText value="Klubb"></h:outputText>
        <h:selectOneMenu id="ClubMenu" value="#{clubName}">
            <f:selectItems value="#{serviceHCP.clubs}" />
        </h:selectOneMenu>

    </h:panelGrid>
    Players
    <c:forEach var="list" items="#{serviceSeries.getSeriesForPlayer(clubName, playerName)}">

<--- More code --->
    </c:forEach>
    <h:commandButton value="Spara" action="#{serviceHCP.saveSerieTotal(clubName, playerName, serieName, noSeries, serie) }"></h:commandButton>

【问题讨论】:

  • 嗯?你是从哪里学会用这种奇怪而无效的方式编写 JSF 的?只需将它们设为正常的 bean 属性即可。不要将模型和控制器的工作紧密耦合到视图中。不要在 getter 方法中执行业务逻辑。
  • 看不出这种方式有什么低效之处。如您所见,我将变量传递到应用程序的不同区域。为传递变量创建一个新类对我来说似乎非常低效。

标签: jsp jsf jstl


【解决方案1】:

由于JSF lifecycle,我希望该方法被调用一次或两次:

JSTL 标签不是组件,因此它们不会参与每个阶段。

考虑这个视图sn-p:

<c:forEach var="_foo" items="#{bar.list(baz)}" />
<h:form>
  <h:inputText value="#{baz}" />
  <h:commandButton value="foo" />
</h:form>

绑定到这个bean:

@ManagedBean
@RequestScoped
public class Bar {
  public List<String> list(String baz) {
    PhaseId phase = FacesContext.getCurrentInstance()
            .getCurrentPhaseId();
    System.out.println(phase + " " + baz);
    return Collections.emptyList();
  }
}

list 方法在调用时打印出当前生命周期阶段及其参数。当我输入一个值并提交表单时,它会打印在服务器日志中:

INFO:   RESTORE_VIEW 1
INFO:   RENDER_RESPONSE 6 hello

JSF servlet 接收字段值作为参数。在 Update Model Values 阶段之前,它不会推送到模型中(这里是请求范围)。如果某些事情导致生命周期缩短到渲染响应(例如验证失败),那么这根本不会发生。

TL;DR

注意表达式的计算时间和频率。

【讨论】:

    猜你喜欢
    • 2013-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-19
    • 2011-05-09
    • 1970-01-01
    • 1970-01-01
    • 2012-02-13
    相关资源
    最近更新 更多