ActionParam , JSFunction Issue
prode Jul 17, 2009 10:21 AMHi All,
Let me explain what I am tryig to do
If I include jsFunction as below in xhtml, it’s calling actionParam’s assignTo binding very well.
<h:form id="appletform"> <a4j:jsFunction name="appletShowObject" actionListener="#{appletBean.dispatchEvent}" ajaxSingle="true" immediate="true"> <a4j:actionparam name="param1" assignTo="#{appletBean.objectId}"/> </a4j:jsFunction> </h:form>
But, if I added the similar thing inside smApplet’s endcodeBegin() programaticaly, the actionparam’s assignTo binding never get called.
Hecne I can not pass a parameters from applet to JSF Bean.
encodeBegin()
/** Adds A4j:jsFunction to call event handlers on widget */ private void addJSFunction(FacesContext context) { if(!isJSFunctionPresent()) { //HtmlAjaxFunction a4jFunction = new HtmlAjaxFunction(); HtmlAjaxFunction a4jFunction = (HtmlAjaxFunction)context.getApplication().createComponent(HtmlAjaxFunction.COMPONENT_TYPE); a4jFunction.setName("appletShowObject"); a4jFunction.setId(context.getViewRoot().createUniqueId()); a4jFunction.setAjaxSingle(true); a4jFunction.setImmediate(true); Class[] params = {javax.faces.event.ActionEvent.class}; String actionExpressionn = "#{appletBean.dispatchEvent}"; a4jFunction.addActionListener(new MethodExpressionActionListener( FacesUtils.createMethodExpression(actionExpressionn, null, params))); addA4jParams(context, a4jFunction, "param1", "#{appletBean.objectId}",String.class); this.getChildren().add(a4jFunction); } }
private void addA4jParams(FacesContext context, HtmlAjaxFunction a4jFunction,String paramName, String Expression,Class<?> expectedType) { HtmlActionParameter a4jParam = (HtmlActionParameter)context.getApplication().createComponent(HtmlActionParameter.COMPONENT_TYPE); a4jParam.setName(paramName); a4jParam.setId(context.getViewRoot().createUniqueId()); ValueExpression valExpr = context.getApplication() .getExpressionFactory() .createValueExpression(context.getELContext(),Expression,expectedType); //a4jParam.setAssignToBinding(valExpr); a4jParam.setValueExpression("assignToBinding", valExpr); Class[] params = {javax.faces.event.ActionEvent.class}; String actionExpressionn = "#{appletBean.setParamValue}"; a4jParam.setActionListener( FacesUtils.createMethodExpression(actionExpressionn, null, params)); a4jFunction.getChildren().add(a4jParam); }
Your any help is highly appreciated.
Thanks in Advance!!!!!