【问题标题】:RichFaces Ajax (conditional) Rendering: HowTo?RichFaces Ajax(条件)渲染:HowTo?
【发布时间】:2011-04-12 13:57:52
【问题描述】:

请看下面的代码片段:

<h:form>
    <h:panelGrid columns="2">
        <h:inputText value="#{vehicleBean.pin}" />
        <a4j:commandButton action="#{vehicleBean.loadVehiclesByPin}" render="results"/>
    </h:panelGrid>
</h:form>
<a4j:outputPanel id="results">
    <rich:dataTable value="#{vehicleBean.vehicles}" rendered="#{not empty vehicleBean.vehicles}">
        ...
    </rich:dataTable>
</a4j:outputPanel>

当我按下按钮时,会发送一个 Ajax 请求来加载一些业务实体。 它们显示在 Rich:dataTable 中,只有在对应的数组不为空时才会呈现。

这适用于我的 Chrome 和 Firefox 4,但不适用于 IE9。 但我很确定这是我的错,而不是 IE 的 ;-)

所以请告诉我:

  • 解决此类问题的正确方法是什么(使用条件渲染元素)?
  • 我应该重新渲染哪些元素?
  • commandButton 也有一个 execute 属性:我什么时候以及为什么必须使用这个属性?

你好,塞比

【问题讨论】:

    标签: ajax jsf richfaces


    【解决方案1】:

    RichFaces 3.x 不支持 IE9,参考这个帖子: http://community.jboss.org/thread/156720

    您可以升级到 RF 4, 或者实现一个过滤器来强制 IE9 在兼容模式下运行:

    public void doFilter(final ServletRequest request, final ServletResponse response, final FilterChain chain) throws IOException, ServletException {
        HttpServletResponse resp = (HttpServletResponse) response;
        resp.addHeader("X-UA-Compatible", "IE=EmulateIE8");
        chain.doFilter(request, resp);
    }
    

    【讨论】:

      【解决方案2】:

      您可以解决的一些问题:

      1. 让您的表单标签包围所有 JSF 组件
      2. 如果 loadVehiclesByPin 依赖于 pin 的值,您应该使用 commandButton 执行 inputText 组件(为其分配一个 id,例如 "inputPin"):execute="@this 输入引脚"
      3. 我不确定,如果您在 render="result" 中使用了正确的 in(注意 NamespaceContainer 概念,请阅读 UIComponent.findComponent 的 javadoc)

      为了更好地调试,我建议在 web.xml 中启用 PROJECT_STAGE=Development 并打开浏览器的 javascript 控制台。

      请注意,在使用条件渲染时,您需要将您的渲染参数指向您的 JSF 组件树中的一个 id,该 ID 已经存在(您在此处通过使用面板包围您的条件 dataTable)

      问候

      【讨论】:

        猜你喜欢
        • 2014-08-02
        • 2011-12-23
        • 2013-08-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-24
        • 2011-03-12
        • 2011-11-26
        相关资源
        最近更新 更多