请看下面的代码片段:
<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);
}
你可以修复的一些东西:
- 让您的表单标签包围所有JSF组件
- 如果loadVehiclesByPin依赖于pin的值,你应该执行inputText组件(分配一个id给它,例如"inputPin")与commandButton: execute="@this inputPin"
- 我不确定,如果你使用正确的in in render="result"(要知道NamespaceContainer的概念,阅读javadoc UIComponent。)findComponent)
为了更好的调试,我建议在web.xml中启用PROJECT_STAGE=Development并打开浏览器的javascript控制台。
请注意,当使用条件呈现时,您需要将呈现参数指向JSF组件树中的一个id,这个id已经存在了(您在这里用面板包围了条件数据表)
对