Как скопировать значение из переменной привязки в итератор в adf? - PullRequest
0 голосов
/ 14 марта 2019

у меня есть таблица adf, которая содержит много столбцов + плюс столбец с кнопкой, которая откроет всплывающее окно для вставки значения

<af:table value="#{bindings.BpmCrMilestoneUPView1.collectionModel}" var="row" rows="#{bindings.BpmCrMilestoneUPView1.rangeSize}" >
                <af:column id="c49" headerText="#{bindings.BpmCrMilestoneUPView1.hints.MilestoneSeq.label}" width="50" displayIndex="-1" minimumWidth="12">
                  <af:inputText value="#{row.bindings.MilestoneSeq.inputValue}" readOnly="true" id="it16">
 </af:inputText>
    </af:column>
                  <af:column>
                <af:inputText value="#{row.bindings.Oldmilesseq.inputValue}"  id="it15">
                </af:column>

    <af:column label="openPopUp" >

    <af:button  action = "#{pageFlowScope.CRInitaitiveBean.openCommentsPopUp}" >
     </af:button>
    </af:column>
    <af:table>

и это всплывающее окно, содержащее текстовое поле ввода

    <af:popup  binding="#{pageFlowScope.CRInitaitiveBean.commentsPopUp}" id="p2">


    <div class="form-group" id="d7">
        <af:outputLabel value="#{lang.previous_comments}" />
        <af:inputText  autoSubmit="true" simple="true" 
        value="#{bindings.newCommentValue.inputValue}" />


   </div>
   </div>

и newCommentValue, указывающий на BpmCrOutputUPView1Iterator на вкладке привязок. если я открою всплывающее окно для каждой строки и введу значения, все значения будут сохранены правильно

но когда я пытаюсь программно зациклить итератор, введенные значения равны нулю

и это код

         RowSetIterator itr = ADFUtils.findIterator("BpmCrOutputUPView1Iterator").getRowSetIterator();
        while (itr.hasNext()) {
            Row row = itr.next();
            if (row != null) {
                System.out.println();
                System.out.println("Current OUTPUT Row Is Not Null");
                String newComment = (String) row.getAttribute("newCommentValue");
                System.out.println();
                System.out.println("new Comment is  -------------------> "+newComment); // it should print the typed value for that row

                but it's printed null 

1 Ответ

1 голос
/ 15 марта 2019

В этом конкретном случае использования будет проще использовать настоятельно рекомендуемую JSFUtils класс с открытым исходным кодом resolExpression .

JSFUtils и ADFUtils - это два утилитарных java-класса, созданных 3 героями ADF Дунканом Миллсом, Стивом Мюнхом и Риком Смитом.Вы можете легко найти тех, кто использует ваш любимый поисковик.

После добавления в ваш проект вы можете получить значение EL-выражения внутри вашего Java-компонента следующим образом:

String newCommentValue= (String)JSFUtils.resolveExpression("#{bindings.newCommentValue.inputValue}");

Вот функция JSFUtils для вашей информации:

/**
 * Method for taking a reference to a JSF binding expression and returning
 * the matching object (or creating it).
 * @param expression EL expression
 * @return Managed object
 */
public static Object resolveExpression(String expression) {
    FacesContext facesContext = getFacesContext();
    Application app = facesContext.getApplication();
    ExpressionFactory elFactory = app.getExpressionFactory();
    ELContext elContext = facesContext.getELContext();
    ValueExpression valueExp = elFactory.createValueExpression(elContext, expression, Object.class);
    return valueExp.getValue(elContext);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...