1

我正在尝试将 JSP 页面转换为 JSF(不允许使用 JSP 代码),但偶然发现了一个问题。注意:这是学术性的,因此没有“肮脏”的解决方案可以做到。

我有 jsp 代码,可以根据各种条件设置图像的图像源和替代文本。有串联和切换条件。这是在一个循环内。

现在,我可以重现遍历所有值的循环,如下所示:

  <ui:repeat value="#{gameapi.game.fieldsList}" var="field">                                          
     <h:graphicImage id="field#{field.fieldNr}" styleClass="field#{field.fieldNr}" 
                                                            url="..." alt="" title=""/>                                          
  </ui:repeat>

但是,图像 url 和 alt 文本总共有 20 多种组合。显然,我怀疑为每种可能性编写有条件渲染或选择的图形图像标签是一个优雅的解决方案,因为这只会随着每一个额外的组合而变得更丑陋。我也无法在底层 java 代码中创建这些字符串,因为这会违反分离视图、模型和控制器的想法。

那么最好的解决方案是什么?这似乎是 JSF 的一个巨大弱点。

4

1 回答 1

1

考虑使用MVVM模式的变体。您可以将专用于查看逻辑的托管 bean 与业务逻辑托管 bean 分开。

<ui:repeat value="#{bizBean.list}" var="_row">
  <h:graphicImage
    url="#{viewModelBean.images[_row.outcome]}"
    alt="#{viewModelBean.alts[_row.outcome]}"
    title="#{viewModelBean.titles[_row.outcome]}" />
</ui:repeat>

viewModelBean可以是具有一堆地图属性的应用程序范围的类型。这假设了一个相对简单的情况,但该模式适合更复杂的需求。

注意:重复控件应该是NamingContainer,因此尝试在 VDL 中设置客户端标识符是多余的。请参阅此处了解更多信息。

于 2012-05-05T19:54:09.370 回答