Запустить действие commandButton с переменной, переданной javascript в JSF - PullRequest
0 голосов
/ 25 апреля 2019

Я пытаюсь сделать вызов Ajax со своей страницы. xhtml на мою функцию поддержки ManagedBean, как показано ниже:

.xhtml код формы

            <h:form id = "jsfform">
                <h:commandButton id="button" action="#{cellBean.children()}">
                    <f:ajax render=":results" />
                </h:commandButton> </h:form>
            <h:panelGroup id="results">
                <th>Child cells</th>
                <td>
                <ui:repeat value="#{cellBean.childCells}" var="cell">
                        <tr>#{cell.cellName}</tr>
                </ui:repeat>
                </td>
            </h:panelGroup>

код функции управляемого компонента

 public List<Cell> children(){
    this.childCells.add(new Cell("cell1"));
    return this.childCells;
}

Приведенный выше код работает нормально, так как каждый раз, когда я запускаю commandButton, добавляется новый объект "Cell"в список и отображается асинхронно в моей форме.

Я запускаю commandButton из JavaScript, используя хитрый способ (что не кажется мне лучшим вариантом)

document.getElementById('jsfform:button').onclick();

Чего я хочу достичь сейчас сделать что-то подобное, но с функцией cellBean.children, имеющей параметры (например, список строк), передать ее в функцию бина и выполнить что-то, что мне делать?Очевидно, что я не могу вызвать commandButton, как я это делал ранее, потому что я не могу передать такие параметры

Пример:

        <h:form id = "jsfform">
            <h:commandButton id="button" action="#{cellBean.children(a_list)}">
                <f:ajax render=":results" />
            </h:commandButton> </h:form>
        <h:panelGroup id="results">
            <th>Child cells</th>
            <td>
            <ui:repeat value="#{cellBean.childCells}" var="cell">
                    <tr>#{cell.cellName}</tr>
            </ui:repeat>
            </td>
        </h:panelGroup>


public List<Cell> children(List<String> alist){
    this.childCells.add(new Cell("cell1"));
    return this.childCells;
}

Заранее спасибо.

=============== ОБНОВЛЕНИЕ ==================

После этого пример чтоЯ пробовал до сих пор это:

. XHTML форма

 <h:form id = "jsfform">
                <h:inputHidden id="childCells" value="#{cellBean.childCellsStr}" />
                <h:inputHidden id="parentCells" value="#{cellBean.parentCellsStr}" />
                <h:commandButton id="button"  style="display: none" action="#{cellBean.children()}">
                    <f:actionListener binding="#{cellBean.checkBtnDisable()}" /> 
                    <f:ajax render=":ajaxform"/>
                </h:commandButton>

Javascript код

  // json1 && json2 are two json strings
document.getElementById('jsfform:childCells').value = json1;
document.getElementById('jsfform:parentCells').value = json2;
//trigger the button of the form with javascript
document.getElementById('jsfform:button').onclick();

Управляемый компонент

private String childCellsStr;
private String parentCellsStr;
//getters && setters

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

1 Ответ

0 голосов
/ 07 мая 2019

Все, что мне нужно было сделать, это добавить параметр execute в тег (после этого урока ). Теперь вызывают сеттеры, а бэк-бины принимают значения, которые я хочу

.xhtml код

<h:form id = "jsfform">
                <h:inputHidden id="childCells" value="#{cellBean.childCellsStr}" />
                <h:inputHidden id="parentCells" value="#{cellBean.parentCellsStr}" />
                <h:commandButton id="button"  style="display: none" action="#{cellBean.children()}">
                    <f:actionListener binding="#{cellBean.checkBtnDisable()}" /> <!--first call the children function, then call the checkBtnDisable -->
                    <f:ajax execute="childCells parentCells" render=":ajaxform"/>
                </h:commandButton>
            </h:form>

код Javascript

    document.getElementById('jsfform:childCells').value = json1;
document.getElementById('jsfform:parentCells').value = json2;
//trigger the button of the form with javascript
document.getElementById('jsfform:button').onclick();

Java Bean

private String childCellsStr;
private String parentCellsStr;
//getters && setters
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...