actionListener on a4j:commandLink not called
jhaley Sep 9, 2008 4:58 PMUsing a binding, I am dynamically building a set of panelBarItems inside of a panelBar. Inside of each panelBar I have a dataTable with a column of a4j:commandLink "Add" links. Visually this is being built properly, but when I click on my any of my "Add" links nothing happens. By nothing I mean my method does not get called and I receive no errors. The add link is mapped an actionEvent called "addArticle", but it never gets called. I'm stuck and am looking for some assistance.
<a4j:region>
<rich:panelBar id="availableArticlesPanelBar" height="100%" width="200" binding="#{surveyCtrl.panelBar}" />
</a4j:region>
/**
* Programmatically builds the RichFaces PanelBar component.
*
* @param panelBar
*/
public void setPanelBar(HtmlPanelBar panelBar) {
HtmlPanelBarItem panelBarItem;
panelBar.getChildren().clear();
Integer iCount = 0;
List categoriesByRoomTypeList = getCategoriesByRoomType(new Integer(
this.categoryBasedOn).intValue());
dynamicLists = new List[categoriesByRoomTypeList.size()];
for (Iterator i = categoriesByRoomTypeList.iterator(); i.hasNext();) {
CategoryDTO category = (CategoryDTO) i.next();
// create <rich:panelBarItem label="category.getCategoryName()"
// id=""panelBarItem_" + iCount.toString()" >
panelBarItem = new HtmlPanelBarItem();
panelBarItem.setLabel(category.getCategoryName());
panelBarItem.setId("panelBarItem_" + iCount);
dynamicLists[iCount] = category.getArticles();
// Create <rich:dataTable align="center" width="100%"
// id=""dynamicLists_" + iCount"
// onRowMouseOver="this.style.backgroundColor='#F1F1F1'"
// onRowMouseOut="this.style.backgroundColor='#{a4jSkin.tableBackgroundColor}'"
// cellpadding="0" cellspacing="0"
// border="0" var="dynamicItem" value="#{surveyCtrl.dynamicLists[" +
// iCount + "]}"">
HtmlDataTable dynamicDataTable = new HtmlDataTable();
dynamicDataTable.setAlign("center");
dynamicDataTable.setWidth("100%");
dynamicDataTable.setId("dynamicLists_" + iCount);
dynamicDataTable
.setOnRowMouseOver("this.style.backgroundColor='#F1F1F1'");
dynamicDataTable
.setOnRowMouseOut("this.style.backgroundColor='#FFFFFF'");
dynamicDataTable.setCellpadding("0");
dynamicDataTable.setCellspacing("0");
dynamicDataTable.setBorder("0");
dynamicDataTable.setVar("dynamicItem");
dynamicDataTable.setValueExpression("value", createValueExpression(
"#{surveyCtrl.dynamicLists[" + iCount + "]}", List.class));
// Create <h:column id="column">.
HtmlColumn column = new HtmlColumn();
column.setId("column");
dynamicDataTable.getChildren().add(column);
// <h:panelGrid columns="2" cellpadding="0" cellspacing="0"
// width="100%"
// columnClasses="panelGridColumnLeft,panelGridColumnRight" id="">
HtmlPanelGrid panelGrid = new HtmlPanelGrid();
panelGrid.setColumns(2);
panelGrid.setCellpadding("0");
panelGrid.setCellspacing("0");
panelGrid.setWidth("100%");
panelGrid
.setColumnClasses("panelGridColumnLeft,panelGridColumnRight");
panelGrid.setId("panelGrid");
column.getChildren().add(panelGrid);
// Create <h:outputText id="articleName_ + iCount"
// value="#{dynamicItem[" + jCount++; + "]}">
HtmlOutputText output = new HtmlOutputText();
output.setId("articleName");
output.setValueExpression("value", createValueExpression(
"#{dynamicItem.articleName}", String.class));
panelGrid.getChildren().add(output);
// <a4j:commandLink immediate="true" limitToList="true"
// ajaxSingle="true" value="#{labels['l.pages.survey.survey.add']}"
// actionListener="#{surveyCtrl.addArticle}"
// reRender="scrollableDataTable">
HtmlAjaxCommandLink ajaxCommandLink = new HtmlAjaxCommandLink();
ajaxCommandLink.setImmediate(true);
ajaxCommandLink.setLimitToList(true);
ajaxCommandLink.setAjaxSingle(true);
ajaxCommandLink.setId("ajaxCmdLink");
ajaxCommandLink.setReRender("scrollableDataTable");
ajaxCommandLink.setValueExpression("value", createValueExpression(
"#{labels['l.pages.survey.survey.add']}", String.class));
ajaxCommandLink.setActionExpression(createActionExpression(
"#{surveyCtrl.addArticle}", String.class));
// <f:param name="selected" value="#{row.id}"/>
UIParameter param = new UIParameter();
param.setName("selected");
param.setValueExpression("value", createValueExpression(
"#{dynamicItem.id}", String.class));
param.setId("param");
ajaxCommandLink.getChildren().add(param);
panelGrid.getChildren().add(ajaxCommandLink);
// dynamicDataTable.getChildren().add(column);
panelBarItem.getChildren().add(dynamicDataTable);
panelBar.getChildren().add(panelBarItem);
iCount++;
}
this.panelBar = panelBar;
}
public ValueExpression createValueExpression(String valueExpression, Class<?> valueType) {
FacesContext facesContext = FacesContext.getCurrentInstance();
return facesContext.getApplication().getExpressionFactory().createValueExpression(
facesContext.getELContext(), valueExpression, valueType);
}
public MethodExpression createActionExpression(String actionExpression, Class<?> returnType) {
FacesContext facesContext = FacesContext.getCurrentInstance();
return facesContext.getApplication().getExpressionFactory().createMethodExpression(
facesContext.getELContext(), actionExpression, returnType, new Class[0]);
}
public void addArticle(ActionEvent event) {
System.out.println("@@@@@ addArticle @@@@@");
String selectedId = (String)getParam("selected");
SelArtlDTO selectedArticle = new SelArtlDTO();
selectedArticle.setSelArtlName(selectedId);
quote.getWorkingSelectedRoom().getSelectedArticles().add(selectedArticle);
}