RichFaces Ajax(条件)渲染:如何



请看下面的代码片段:

<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的;-)

所以请告诉我:

  • 解决这种问题的正确方法是什么(有条件渲染的元素)?
  • 我应该重新渲染哪个元素?
  • 命令按钮也有一个执行属性:何时以及为什么我必须使用这个属性?

问候印度证券交易委员会

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);
}

你可以修复的一些东西:

  1. 让您的表单标签包围所有JSF组件
  2. 如果loadVehiclesByPin依赖于pin的值,你应该执行inputText组件(分配一个id给它,例如"inputPin")与commandButton: execute="@this inputPin"
  3. 我不确定,如果你使用正确的in in render="result"(要知道NamespaceContainer的概念,阅读javadoc UIComponent。)findComponent)

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

请注意,当使用条件呈现时,您需要将呈现参数指向JSF组件树中的一个id,这个id已经存在了(您在这里用面板包围了条件数据表)

相关内容

  • 没有找到相关文章

最新更新