Jsf 引用ui:名称中带有连字符的参数

Jsf 引用ui:名称中带有连字符的参数,jsf,jsf-2.2,Jsf,Jsf 2.2,在多年避免使用JSF之后,我终于开始尝试使用JSF,但在做最简单的事情时遇到了问题。在JSTL世界中,通过执行${requestScope['big-bad-invalid-name']}可以很容易地在名称中使用连字符引用内容。然而,这似乎对a不起作用,或者我只是从一个错误的对象开始——这可能是一个问题 我有一个引用模板的简单文件: <html xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:c="http://java.su

在多年避免使用JSF之后,我终于开始尝试使用JSF,但在做最简单的事情时遇到了问题。在JSTL世界中,通过执行${requestScope['big-bad-invalid-name']}可以很容易地在名称中使用连字符引用内容。然而,这似乎对a不起作用,或者我只是从一个错误的对象开始——这可能是一个问题

我有一个引用模板的简单文件:

<html xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:c="http://java.sun.com/jsp/jstl/core">
    <ui:composition template="/WEB-INF/template/main.xhtml">
        <ui:param name="require-data-main" value="/something" />
        <ui:define name="content">...</ui:define>
    </ui:composition>
</html>
遗憾的是,我不知道如何引用我的param,因为{require data main}会因为连字符而崩溃。我尝试了{param['require-data-main']}、{viewScope['require-data-main']}、{pageScope['require-data-main']}、{applicationScope['require-data-main']}。我的情人似乎不在任何地方

更新1-我创建了另一个不带连字符的参数。正如我在上面尝试的那样,没有任何东西能够解析该值。然而,一个简单的{requireDataMain}却做到了。我已经编写了大量JSP。所以我不太喜欢更改变量名。我仍然很想知道如何使用名称中的连字符引用参数


有人见过我的情人吗?是否有其他方法检索参数?

JSF页面应使用托管Bean访问java代码。如果您的jsf页面有一个控制器类,可以使用EL:{managedbean.field}将其注入jsf,其中managedbean是以下类:

@ManagedBean(name = "managedbean")
public class YourBean {
    private String field;
    //getter and setter for field
}

希望我正确理解了你的问题。

我并不反对你的说法,但它并没有真正解决问题。当有一些逻辑需要从视图中分离出来时,托管bean是很好的。我所说的实际上只适用于视图本身,即模板方面。使用模板为每个视图需要一个托管bean将是一件可怕的事情。现在明白了。看,我认为它完全回答了你的问题。仍然没有帮助,根本没有回答我的问题。我知道如何使用'ui:param'元素。我只是不知道在名称中引用带连字符的参数。如果使用IDEA,您可以轻松地将所有RequiredData main重命名为RequiredDataMain,包括按Shift+F6在jsp中出现的所有内容。但是,这不是答案。表示连字符是属性名称的无效字符:因为为作用域变量选择的名称。。。不是有效的Java标识符,因为它包含破折号,因此代码将以静默方式失败。这也是不正确的。当使用数组表示法时,可能会使用无效名称:{pageScope['Ilalk-name]}。顺便说一句,这篇文章从2003年开始就一直有效,直到今天仍然有效。