我在提交复合组件时遇到问题。
我的大多数复合组件都包含输入组件和“提交”按钮。当我试图将按钮仍然放在同一个 h:form 但不在同一个复合组件中时,提交的值似乎在某个地方“丢失”了。而且,例如,我的验证器被调用原始值。
例子 :
<composite:interface>
<composite:attribute name="titreContext" required="true"/>
</composite:interface>
<composite:implementation>
<p:outputPanel id="selectionTitreDetailsPanel" styleClass="selectionTitreDetails">
<p:outputPanel id="selectionTitreDetailsPanelInner" rendered="#{not empty cc.attrs.titreContext.selected}">
<p:panelGrid columns="2" id="panelId">
<h:outputText id="idLabel" value="Id :"/>
<h:outputText id="id" value="#{cc.attrs.titreContext.selected.titeluid}"/>
<p:tooltip for="id" value="Identifiant unique"/>
</p:panelGrid>
<p:panelGrid columns="2" id="titelePanel">
<p:outputLabel for="selectTitele" value="Titre :"/>
<p:selectOneMenu id="selectTitele" value="#{cc.attrs.titreContext.selected.titele}" effect="fold" styleClass="fullWidth">
<f:selectItems value="#{constants.getTitelesForTypman(cc.attrs.titreContext.selected.titele.typman)}" var="titele" itemLabel="#{titele.titelelil}" itemValue="#{titele}" styleClass="fullWidth"/>
<p:column styleClass="fullWidth">#{titele.titelelil}</p:column>
</p:selectOneMenu>
</p:panelGrid>
[...]
<p:commandButton id="confirmerModifications" icon="small_edit" type="submit" value="Confirmer les modifications"
action="#{elutersEditionContext.confirmeModifsSelection}" process="mandatsTerritorial"
update="mandatsTerritorial #{cc.attrs.notifUpdates}"/>
</composite:implementation>
作品。
但是将 p:commandButton 从组合中取出:
<h:form>
<mylib:mycomponent /*parameters *//>
<p:commandButton /*parameters*/ />
</h:form>
不起作用。当我调试我的验证器时,我可以看到修改后的值甚至没有提交。getLocalValue、getSubmittedValue 和 getValue 均未更改。
复合组件声明中是否有用于纠正这种情况的语法?顺便说一句:当我将组件编写为复合组件而不是自定义组件时,在支持 bean 中检索 #{asen} 就可以了。
提前致谢。
我在用 :
- PrimeFaces 3.4.1
- CODI 1.0.5
- OpenWebBeans 1.1.6
- 我的脸 2.1.9
- 雄猫 7.0.32
(更新)这个非常奇怪的问题是由 h:form 嵌套引起的。
很奇怪,因为 h:form 嵌套并没有扰乱第一级复合组件的处理,而是在嵌套复合中造成了这种奇怪的“输入丢失”。
嵌套看起来像这样:
<h:form>
...
<p:tabView ...>
<p:tab>
<h:form>
<my:composite ....>
</h:form>
</p:tabView>
</h:form>