【问题标题】:how to render things in different parts of a jsf structure with f:ajax如何使用 f:ajax 在 jsf 结构的不同部分渲染内容
【发布时间】:2013-03-11 10:36:14
【问题描述】:

我的问题的简明版本是这样的: 我如何响应

上的模糊事件
<h:inputText> 

获取相同的值以显示在一个

<h:outputText> 

位于 inputText 字段范围之外。

inputtext 字段具有以下 xpath:

//*[@id="form:j_idt40:src_table:0:j_idt137"]

输出文本位于此处:

//*[@id="form:j_idt40:target_table:0:target_id"]

我正在使用 primefaces 数据表,两条路径位于两个单独的数据表中

输入字段的jsf代码如下:

<p:dataTable id="src_table">
    <p:column id="src_id" headerText="srcHeader">
        <h:inputText value="#{bean.myAttribute}">
            <f:ajax event="blur" render="src_id WHAT_SHOULD_GO_HERE?" ></f:ajax>
        </h:inputText>
    </p:column>
</p:datatable>

输出代码如下

<p:dataTable id="target_table">
    <p:column headerText="TargetHeader">
        <h:outputText id="target_id" value="#{bean.myAttribute}" />
    </p:column>
</p:datatable>

我在 WHAT_SHOULD_GO_HERE 上尝试了几条路径?占位符,但我似乎无法正确处理。他们最终都抛出了如下面的异常:

javax.faces.FacesException: <f:ajax> contains an unknown id ':target_id' - cannot locate it in the context of the component j_idt137

这当然是我替换 WHAT_SHOULD_GO_HERE 的时候?与 :target_id

我也试过了:

form:j_idt40:target_table:0:target_id, 

:form:j_idt40:target_table:0:target_id 

但没有运气。

谁能帮助我理解 xpath 甚至 f:ajax 以及渲染视图的特定部分?

【问题讨论】:

  • 伙计,我不知道用普通的 JSF 是否可行...你不能只渲染整个 target_table 吗?
  • @elias 是的,这就足够了,知道如何实现吗?
  • 在 f:ajax 中使用 render="src_id :form:target_table" 就足够了。
  • 几乎做到了。我需要完整路径:form:j_idt40:target_table
  • 酷,很高兴你解决了它! :)

标签: ajax jsf xpath


【解决方案1】:

谁能帮助我理解 xpath

JSF 根本不使用 &lt;f:ajax&gt; 中的 Xpath。它只需要一个相对或绝对的客户端 ID。这在How to find out client ID of component for ajax update/render? Cannot find component with expression "foo" referenced from "bar"中有详细说明。

您应该只将由自动生成的 ID j_idt40 表示的组件更改为具有固定 ID 集,否则当您稍后在视图中添加或删除组件时它会再次中断。

【讨论】:

    猜你喜欢
    • 2013-09-05
    • 2020-04-01
    • 2011-05-07
    • 1970-01-01
    • 2012-08-03
    • 2011-08-22
    • 2011-07-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多