以编程方式将UiParameter添加到UIAjaxFunction中

Add UiParameter to UIAjaxFunction programmatically

本文关键字:UIAjaxFunction 添加 UiParameter 编程 方式      更新时间:2023-09-26

这是使用带有参数的richfaces jsFunction的一个简短示例。

<r:jsFunction name="addTag" action="#{bean.method}">
   <r:param name="param" assignTo="#{bean.tagId}"/>
</r:jsFunction>

然后可以使用from javascript addTag('1'),参数将存储到bean中。

我需要以编程方式完成创建jsFunction和加载参数的相同功能。这是我使用但不起作用的代码:

UIAjaxFunction jsFunctionAddTag = new UIAjaxFunction();
jsFunctionAddTag.setName("addTag");
FacesContext fc = FacesContext.getCurrentInstance();
ExpressionFactory ef = fc.getApplication().getExpressionFactory();
MethodExpression me = ef.createMethodExpression(fc.getELContext(), "#{bean.method}", 
                      null, new Class[]{});
jsFunctionAddTag.setActionExpression(me);
UIParameter param = new UIParameter();
param.setName("param");
param.setAssignToExpression(ef.createValueExpression(fc.getELContext(), 
                            "#{bean.tagId}", String.class));
jsFunctionAddTag.getChildren().add(param);

当执行该方法时,不设置tagId的值。我做错了什么?

作为服务器端的一种变通方法,可以从ExternalContext:获取参数

FacesContext context = FacesContext.getCurrentInstance();
Map map = context.getExternalContext().getRequestParameterMap();
String paramValue = (String)map.get("paramName");