Я пытаюсь сделать вызов 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
, установщики вспомогательных компонентов не срабатывают и значения равны нулю