RichFaces Ajax(条件)渲染:如何?

RichFaces Ajax(条件)渲染:如何?,ajax,jsf,richfaces,Ajax,Jsf,Richfaces,请查看以下代码段: <h:form> <h:panelGrid columns="2"> <h:inputText value="#{vehicleBean.pin}" /> <a4j:commandButton action="#{vehicleBean.loadVehiclesByPin}" render="results"/> </h:panelGrid> </h:form&g

请查看以下代码段:

<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还有一个执行属性:何时以及为什么必须使用该属性?
问候Sebi

RichFaces 3.x不支持IE9,请参阅以下帖子:

您可以升级到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);
}

您可以解决的一些问题:

让表单标签包围所有JSF组件 如果loadVehiclesByPin依赖于pin的值,则应执行inputText组件并为其分配一个id,例如使用commandButton的inputPin,如下所示:execute=@this inputPin 我不确定,如果使用正确的in-in-render=result,请注意NamespaceContainer的概念,请阅读UIComponent.findComponent的javadoc 为了更好地调试,我建议在web.xml中启用PROJECT_STAGE=Development,并打开浏览器javascript控制台

请注意,在使用条件呈现时,您需要将呈现参数指向JSF组件树中的id,您在这里通过使用面板包围条件数据表已经做到了这一点

问候