回复消息到JSF 2.0页面

时间:2012-09-18 17:23:24

标签: java jsf-2

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

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

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

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

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

<h:messages globalOnly="true" />

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

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

谢谢。

2 个答案:

答案 0 :(得分:2)

为了使视图中的任意变量易于使用,您可以在例如通过在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中注入此映射,或以编程方式请求它,然后在其中放入一些内容。 E.g:

@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>

答案 1 :(得分:0)

不确定我理解这个问题。我也不熟悉Spring MVC,我必须说这个例子传递给我。

但是我认为它基本上听起来像是要构建输出服务器端或使用其他组件。

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

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

或者您可能希望使用其他组件输出。听起来你只是想要一个带有文本的框,为此我自己会使用连接的outputText。

对于外观漂亮的输出,您可能需要查看素数面,富像面或冰面。我自己更喜欢primefaces,也许这看起来不错:

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