0

问题:使用动态模型来创建 Primefaces 组件,例如Menubar移除了在 JSF/XHTML 页面中指定要通过 Ajax 更新哪些组件的能力。在 Java back bean 中对其进行硬编码似乎是一种不好的做法。

例子:

JSF:

<h:panelGroup id="updateDiv">
    <!-- components -->
</h:panelGroup>

<p:menubar model="#{backBean.model}" />

回豆:

@ManagedBean
@ViewScoped
public class BackBean {
    private MenuModel model;

    public BackBean() {
        model = new DefaultMenuModel();
        MenuItem item = new MenuItem();
        item.setUpdate("updateDiv");  // Here: hardcoded dependency on JSF page.
        item.setValue("Click Me.");
        model.addMenuItem(item);
    }

    public getModel() {
        return model;
    }
}

updateDiv在将其BackBean耦合到 JSF 页面中指定。这似乎很糟糕?是吗?如果是这样,有哪些替代方案?也许使用<f:param/>或类似的东西可能会有所帮助。

4

1 回答 1

1

就个人而言,我不会有太多麻烦。无论如何,支持 bean 上的代码通常都耦合到 JSF 页面。

不过,我会将它放在一个具有有意义名称的常量中,例如:

private static final String CONTENT_PANEL_ID = "updateDiv";

这里已经有一些关于 SO 的讨论,关于在支持 bean 中允许多少耦合,特别是关于属性和方法。我建议通读这些,然后自己决定:

于 2013-01-11T12:28:06.467 回答