【问题标题】:Echo Message to JSF 2.0 Page向 JSF 2.0 页面回显消息
【发布时间】:2012-09-11 00:15:21
【问题描述】:

我是 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中有相应的方法吗?

谢谢。

【问题讨论】:

    标签: java jsf-2


    【解决方案1】:

    为了使视图可以轻松使用任意变量,您可以定义一个 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>
    

    【讨论】:

      【解决方案2】:

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

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

      例如,使用单个 &lt;h:outputText&gt; 并将其与返回串联数据的 getter 一起使用。

      或者您应该使用&lt;h:dataTable&gt; 来显示您的数据?

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

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

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

      【讨论】:

      • 是的,我不想将 getter 绑定到输出文本。然后我将为我想要设置的每个 UI 字段设置一个吸气剂。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-26
      • 1970-01-01
      • 1970-01-01
      • 2011-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多