不通过工作
发布时间:2020-12-16 02:54:23 所属栏目:百科 来源:网络整理
导读:我有一个具有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"
我有一个具有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表达式)另外abax响应在firebug中看起来不正确: <?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>.因此,在与< h:selectOneRadio>相同的命名容器父中寻找具有客户机ID reg-unknown的组件,其是< cc:implementation>本身(您可能已经知道复合组件实现了
NamingContainer ).但是,所需的组件不在那里.
您最好指定一个绝对客户端ID(因此,从:开始,以便相对于UIViewRoot寻找它).您可以通过两种通用方式实现此目的: >硬编码(假设这一切都在ID表格的表格内): <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作为前缀. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |