Version: MyFaces 2.2.8ne peut pas affecter la variable d'une autre Beans avec le composant composite MyFaces
Questions: J'ai une composante composite qui attribuera une valeur pour la variable qui est passée du composite. Cela fonctionne bien dans Mojara 2.2.12 (avant de migrer vers Myfaces 2.2.8).
Ceci est mon code composite: info.xhtml
<composite:interface>
<composite:attribute name="id" />
<composite:attribute name="methodToGetRecordFromInfo" method-signature="java.util.List action(id.co.sg.core.Dto)" required="true" />
</composite:interface>
<p:dataTable id="tblInfoCodeComponent"
var="codeComponent"
value="#{infoBean.grid}"
<p:columnGroup type="header">
<p:row>
<p:column headerText="CodeComponent"/>
</p:row>
</p:columnGroup>
<p:column>
<p:commandLink value="#{codeComponent.map['componentCode']}"
process="@this"
icon="ui-icon-search"
update="#{infoBean.field.map['update']}">
<f:setPropertyActionListener
value="#{infoBean.wrap(codeComponent)}"
target="#{cc.attrs.methodToGetRecordFromInfo}" />
</p:commandLink>
</p:column>
</p:dataTable>
et c'est la méthode dans le code de haricot composite infoBean.java
public Dto wrap(Dto codeComponentRecord) {
Dto result = new Dto();
result.putString("callerId", "callerId");
result.putDto("record", codeComponentRecord.clone());
return result;
}
Dto, était une sorte d'objet de carte qui nous utilisons pour simplifier pour nos travaux.
et voici comment nous l'utilisons dans le principal xhtml
input.xhtml
<info:codeComponentInfo id="codeComponentInfo" methodToGetRecordFromInfo="#{inputBean.selectedInfoRecord}" />
ce qui est le code dans inputBean.java
private Dto selectedInfoRecord;
public void setSelectedInfoRecord(Dto infoDto){
String id = infoDto.getString("callerId","");
activeRow.putDto("codeComponent", infoDto.getDto("record"));
}
public Dto getSelectedInfoRecord() {
return selectedInfoRecord;
}
quand im MyFaces 2.2 utilisation .8, la méthode setSelectedInfoRecord n'invoque pas. donc, je ne peux pas obtenir le résultat que je choisis de l'infoBean dans le InputBean.
puis je l'ai vu cet article Pass Argument to a composite-component action attribute
donc je modifié que le code info.xhtml réel dans celui-ci
<composite:interface>
<composite:attribute name ="beanName" type="java.lang.Object"/>
<composite:attribute name ="methodName" type="java.lang.String"/>
</composite:interface>
...
<f:setPropertyActionListener
value="#{infoBean.wrap(codeComponent)}"
target="#{cc.attrs.beanName[cc.attrs.methodName]}" />
et c'est la nouvelle input.xhtml
<info:goodsCodeComponentInfo id="goodsCodeComponentInfo" beanName="infoBean" methodName="selectedInfoRecord"/>
mais c'est ce que j'ai trouvé
erreur BusinessExceptionHandler - $$$$$ Une exception non gérée est survenue org.apache.myfaces.view.facelets.el.ContextAwarePropertyNotFoundException: javax.el.PropertyNotFoundException: Propriété 'selectedInfoRecord' introuvable sur le type java.lang.String
puis je tente de modifier le info.xhtml dans celui-ci
<f:setPropertyActionListener
value="#{infoBean.wrap(codeComponent)}"
target="#{cc.attrs.beanName.methodName}" />
ou celui
<f:setPropertyActionListener
value="#{infoBean.wrap(codeComponent)}"
target="#{cc.attrs.beanName.selectedInfoRecord}" />
et toujours la même erreur que ci-dessus ..
donc j'essayer de nouveau une fois mod dans celui-ci
<f:setPropertyActionListener
value="#{infoBean.wrap(codeComponent)}"
target="#{inputBean.selectedInfoRecord}" />
Il fonctionne bien !!! mais ce n'est pas ce dont j'ai besoin, j'ai besoin de passer le nom du bean des paramètres.
quelqu'un peut m'aider à résoudre ce cas?
J'utilise Java 8 et tomcat 8.0.30 et EL 3