Версия: 2.2.8 MyFacesНевозможно назначить переменную из другого Фасоль с компонентом композиционного материала в MyFaces
Вопросы: У меня есть некоторый составной компонент, который будет назначать некоторое значение переменной, которая передается из композита. Это хорошо работает в Мохаре 2.2.12 (до перехода на Myfaces 2.2.8).
Это мой композиционный код: 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>
и это метод в коде композит боба infoBean.java
public Dto wrap(Dto codeComponentRecord) {
Dto result = new Dto();
result.putString("callerId", "callerId");
result.putDto("record", codeComponentRecord.clone());
return result;
}
Dto, был какой-то объект карты, который мы используем для упрощения наших работ.
и это, как мы используем его в основном XHTML
input.xhtml
<info:codeComponentInfo id="codeComponentInfo" methodToGetRecordFromInfo="#{inputBean.selectedInfoRecord}" />
и это код в 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;
}
, когда им MyFaces использование 2.2 .8, метод setSelectedInfoRecord не вызывает. так, я не могу получить результат, который я выбираю из infoBean в inputBean.
, а затем я увидел эту статью Pass Argument to a composite-component action attribute
так я модифицированную, что фактический код info.xhtml в одну эту
<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]}" />
и это новый input.xhtml
<info:goodsCodeComponentInfo id="goodsCodeComponentInfo" beanName="infoBean" methodName="selectedInfoRecord"/>
но это то, что я нашел
ОШИБКА BusinessExceptionHandler - $$$$$ необработанное исключение произошло org.apache.myfaces.view.facelets.el.ContextAwarePropertyNotFoundException: javax.el.PropertyNotFoundException: Свойство 'selectedInfoRecord' не найден по типу java.lang.String
, а затем я пытаюсь изменить info.xhtml в одну эту
<f:setPropertyActionListener
value="#{infoBean.wrap(codeComponent)}"
target="#{cc.attrs.beanName.methodName}" />
или это один
<f:setPropertyActionListener
value="#{infoBean.wrap(codeComponent)}"
target="#{cc.attrs.beanName.selectedInfoRecord}" />
и до сих пор имеет такую же ошибку, как указано выше ..
поэтому я стараюсь модник его еще раз в этот один
<f:setPropertyActionListener
value="#{infoBean.wrap(codeComponent)}"
target="#{inputBean.selectedInfoRecord}" />
Он хорошо работает !!! но это не то, что мне нужно, мне нужно передать имя компонента из параметров.
Кто-нибудь может помочь мне решить этот случай?
Я использую Java 8 и 8.0.30 и кот EL 3