0

我是 JSF 2.0 的新手,正在尝试向我的页面输出一条消息。我想要一个接受一些输入、进行一些处理并显示一些输出的表单。看起来很简单吧?但是,我不想在我的支持 bean 中定义一个属性来显示输出:

<h:outputText value="#{bean.property}" />

这种方法对我来说似乎很混乱。对于要显示的每条状态消息,我都需要一个成员变量。我也不想将输出显示绑定到表单变量,如下所示:

<h:inputText id="someId" />
<h:message for="someId" />

因为我的状态结果没有对应的表单变量。设置消息并使用全局消息:

<h:messages globalOnly="true" />

也不能很好地工作,因为我可能需要更新页面上的多个元素(不要将所有状态消息集中到同一个 div 中)。

来自 Spring MVC,可以在传递给视图的 ModelAndView 对象上设置任意属性,然后从视图中访问这些属性。JSF中有相应的方法吗?

谢谢你。

4

2 回答 2

2

为了使视图可以轻松使用任意变量,您可以在请求范围内定义一个 Map,方法是将以下内容放入faces-config.xml

<managed-bean>
    <description>Request scoped map for general usage</description>
    <managed-bean-name>map</managed-bean-name>
    <managed-bean-class>java.util.HashMap</managed-bean-class>
    <managed-bean-scope>request</managed-bean-scope>
</managed-bean>

您可以将此映射注入您的支持 bean,或者以编程方式请求它,然后在其中放入一些东西。例如:

@ManagedBean
public class GeneralMapBacking {

    @ManagedProperty("#{map}")
    private Map<Object, Object> map;

    public void onPreRenderView() {
        map.put("foo", "bar");
    }

    public void setMap(Map<Object, Object> map) {
        this.map = map;
    }  
}

您可以通过 Facelet 上的 EL 引用此地图,例如:

<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
>
    <h:body>   
        <f:event listener="#{generalMapBacking.onPreRenderView}" type="preRenderView" />

        #{map.foo}       
    </h:body>
</html>
于 2012-09-18T21:37:29.950 回答
0

不确定我是否理解这个问题。我对 Spring MVC 也不熟悉,我必须说这个例子让我很熟悉。

但是我认为这基本上听起来像是您想要构建输出服务器端或使用另一个组件。

例如,使用单个<h:outputText>并将其与返回连接数据的 getter 一起使用。

或者也许您应该使用 a<h:dataTable>来显示您的数据?

或者,也许您想使用其他组件进行输出。听起来您只想要一个带有文本的框,为此我自己会使用串联的 outputText。

为了获得好看的输出,您可能需要查看 primefaces、richfaces 或 icefaces。我自己更喜欢primefaces,也许这看起来不错:

http://www.primefaces.org/showcase-labs/ui/dataListUnordered.jsf

于 2012-09-18T18:43:45.643 回答