Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 如何访问EL变量并将其作为参数传递给EL中的函数?_Jsf_Jsp Tags_El - Fatal编程技术网

Jsf 如何访问EL变量并将其作为参数传递给EL中的函数?

Jsf 如何访问EL变量并将其作为参数传递给EL中的函数?,jsf,jsp-tags,el,Jsf,Jsp Tags,El,我想在一个bean上调用一个函数,在jsp中使用EL将一个参数传递给它。 问题在于,它不允许出现以下情况: “${teacherBean.certificationFor(${SpecialField})” 问题是我想迭代一个数组,并为作为参数传递的数组中的所有值调用函数certificationFor。 我通过以下方式获取数组中的值: 所以基本上我想做一些事情,比如: ${teacherBean.certificationFor(${SpecialField}) 但我不能那样做。 我可以用其

我想在一个bean上调用一个函数,在jsp中使用EL将一个参数传递给它。 问题在于,它不允许出现以下情况: “
${teacherBean.certificationFor(${SpecialField})

问题是我想迭代一个数组,并为作为参数传递的数组中的所有值调用函数certificationFor。 我通过以下方式获取数组中的值:

所以基本上我想做一些事情,比如: ${teacherBean.certificationFor(${SpecialField}) 但我不能那样做。 我可以用其他方式做这个吗

我是EL的新手。:) 非常感谢您的帮助。

那么:

${teacherBean.certificationFor(particularField)}

您到底想在何处执行此操作?为了什么?只是为了获取显示值?至少,在Java EE 6之前的标准EL中,您不能这样传递方法参数。在中或中,您可以这样做。语法如下:

${teacherBean.certificationFor(particularField)}
请注意,不能嵌套EL表达式,EL表达式本身已经是一个完整的表达式

但是,在标准EL实现中,您可以使用大括号符号通过键访问
映射
值。因此,如果您有
映射认证
,其中键对应于
特定字段
和相关值:

private Map<String, String> certifications = new HashMap<String, String>();

public Map<String, String> getCertificationFor() {
    return this.certifications;
}
这在幕后决定

teacherBean.getCertificationFor().get(particularField)

我认为在标准EL中,除了定义封装在EL函数中的函数外,没有其他选择

阅读:靠近底部的 文件


但是正如BalusC已经提到的,如果您可以使用另一个EL实现,如果您能够将这种依赖添加到应用程序中

如果您正在访问一个更好地表示为单独功能的通用功能,那么您可以编写如下内容:

${certificationFor[teacherBean][particularField]}
其中certificationFor映射到扩展类的certificationFor类。您实现了
结果(对象[]args)
方法中的功能。此方法的args是传递给EL中
${certificationFor}
对象的args

public class CertificationFor extends ELMethod {
  public Object result(Object[] args) {  
    TeacherBean teacherBean = (TeacherBean) args[0];  
    String property = (String) args[1];

    // your implementation goes here
    return ....;
  }
}  
诀窍是将对象用作映射的链式映射,这是将多个参数传递给EL函数的一种方法

如果您感兴趣,可以在此处查看完整代码和代码片段:

public class CertificationFor extends ELMethod {
  public Object result(Object[] args) {  
    TeacherBean teacherBean = (TeacherBean) args[0];  
    String property = (String) args[1];

    // your implementation goes here
    return ....;
  }
}