gpt4 book ai didi

ajax - not working via

转载 作者:行者123 更新时间:2023-12-04 22:46:29 28 4
gpt4 key购买 nike

我有一个具有 ajax 的复合组件:

<composite:interface>
<composite:attribute name="question" required="true"/>
<composite:attribute name="value" required="false"/>
<composite:attribute name="id" required="true" />
<composite:clientBehavior name="alter"
event="change" targets="input"/>
</composite:interface>
<composite:implementation>
<label for="#{cc.attrs.id}">
<h:outputText value="#{cc.attrs.question}" />
</label>
<div class="fld">
<h:selectOneRadio value="#{cc.attrs.value}" id="input">
<f:selectItem itemValue="true" itemLabel="Yes" />
<f:selectItem itemValue="false" itemLabel="No" />
</h:selectOneRadio>
</div>
</composite:implementation>

当我在我的页面中使用这个复合组件时:
<question:yesNo question="#{myMSG['knowRegQuestion']}" value="#{vehicle.regKnown}" id="is-reg-known">
<f:ajax event="alter" render="reg-unknown" />
</question:yesNo>
......
<h:panelGroup id="reg-unknown" styleClass="questionGroup man-veh-srch">
......
<h:selectOneListbox value="#{vehicle.model}" size="1" rendered="#{vehicle.regKnown eq 'true'}">
......
</h:selectOneListbox>
</h:panelGroup>

ajax 正在触发,模型正在正确更新,但渲染没有改变。 (我尝试了各种 EL 表达式)在 firebug 中,ajax 响应看起来也不正确:
<?xml version='1.0' encoding='UTF-8'?>
<partial-response id="j_id1"><changes><update id="j_id1:javax.faces.ViewState:0"><![CDATA[-2911901889097730230:4227240037100614528]]></update></changes></partial-response>

我错过了什么?
(谢谢)

最佳答案

<f:ajax render> 中指定的任何相关客户端 ID相对于父级 ClientBehaviorHolder 解析组件树中的组件。在您的特定情况下,这实际上是 <h:selectOneRadio> .客户端 ID reg-unknown 的组件因此,在与 <h:selectOneRadio> 相同的命名容器父级中寻找,这是 <cc:implementation>本身(您可能已经知道复合组件实现 NamingContainer )。但是,所需的组件不在那里。

您最好指定一个绝对客户端 ID(因此,以 : 开头,以便相对于 UIViewRoot 进行搜索)。您可以通过两种一般方式实现这一点:

  • 对其进行硬编码(假设这一切都在 ID 为 form 的表单中):
    <h:form id="form">
    <question:yesNo ...>
    <f:ajax event="alter" render=":form:reg-unknown" />
    </question:yesNo>
    ...
    <h:panelGroup id="reg-unknown" ...>
    ...
    </h:panelGroup>
    </h:form>
  • 引用 UIComponent#getClientId() (如果不知道父命名容器的 ID):
    <h:form ...>
    <question:yesNo ...>
    <f:ajax event="alter" render=":#{regUnknown.clientId}" />
    </question:yesNo>
    ...
    <h:panelGroup binding="#{regUnknown}" ...>
    ...
    </h:panelGroup>
    </h:form>

  • 这确实很尴尬。这曾被报道为 Mojarra issue 1510 ,但他们并不认为这是一个错误,因为复合组件本身不应该知道复合组件之外的其他组件的任何信息(尽管解决方案理论上很简单:如果 <f:ajax render> 不以 :@ ,然后在其前面加上复合组件父级的客户端 ID)。

    关于ajax - <f :ajax render> not working via <composite:clientBehavior>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23804002/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com