UICommandLink inside HtmlColumn don´t call bean method.
danilocps Jan 10, 2014 12:38 PMHi all.
I am experiencing a problem with the dynamic components UICommandLink inside the HtmlColumn component.
I created a datatable:
Application app = FacesContext.getCurrentInstance().getApplication();
HtmlDataTable dataTable = (HtmlDataTable) app.createComponent(HtmlDataTable.COMPONENT_TYPE);
dataTable.setValue(someDataModel);
dataTable.setVar("item");
HtmlColumn col = (HtmlColumn) app.createComponent(HtmlColumn.COMPONENT_TYPE);
UIOutput out = (UIOutput) app.createComponent(UIOutput.COMPONENT_TYPE);
out.setValue("col title");
col.getFacets().put("header", out);
UICommandLink link = (UICommandLink) app.createComponent(UICommandLink.COMPONENT_TYPE);
link.setExecute("@this");
link.setValue("click here");
ExpressionFactory expf = FacesContext.getCurrentInstance().getApplication().getExpressionFactory();
MethodExpression exp = expf.createMethodExpression(ctx.getELContext(), "#{myBean.actionLink}"
, null, new Class[] {});
link.setActionExpression(exp);
col.getChildren().add(link);
dataTable.getChildren().add(col);
The method actionLink in myBean is not called.
But if I put the UICommandLink outside the dataTable works. Or if I put the UICommandLink in (header of HtmlColumn):
col.setHeader(link);
Works fine.
The problem is when the UICommandLink inside the HtmlColumn component (as children).
To solve temporarily this problem, my commandLink call a jsFunction:
UICommandLink link = (UICommandLink) app.createComponent(UICommandLink.COMPONENT_TYPE);
link.setExecute("@none");
link.setValue("click here");
ExpressionFactory expf = FacesContext.getCurrentInstance().getApplication().getExpressionFactory();
ValueExpression vexp = expf.createValueExpression(ctx.getELContext(), "jsCommandLinkTemp('#{item[0]}'); return false;", Object.class);
link.setValueExpression("onclick",vexp);
col.getChildren().add(link);
the xhtml:
<a4j:jsFunction name="jsCommandLinkTemp" action="#{myBean.actionLink}">
<a4j:param name="param1" assignTo="#{myBean.idDataTable}"/>
</a4j:jsFunction>
The method actionLink is called and the attribute idDataTable receive the dataTable information, everything works.
Did I do something wrong? I have to pass some attribute to UICommandLink? I don´t want to use JsFunction to call my method.
Thanks (sorry about my english)