当前位置: 首页 > 知识库问答 >
问题:

EL#{bean.id}如何调用托管bean方法bean.getID()

卞俊哲
2023-03-14
<p:inputText id="id" value="#{bean.id}">

我的托管bean

private String id;

public void setId(String id) {
    this.id = id;
}

public String getId() {
      return id;
}

共有1个答案

戈巴英
2023-03-14

#{}表达式调用getter和setter方法不是JSF的一部分,而是表达式语言(最常见的是EL)的一部分。JSF利用EL通过适当的getter和setter将HTML组件的数据绑定到bean的字段。这是:

  • 如果bean存在,表达式语言将在正确的范围内执行已注册bean的正确getter。
  • 如果client执行表单提交或ajax请求,那么发送到服务器的组件(通常是 中的所有组件,如果是ajax请求,您可以声明要发送到服务器的组件)将包含一个新值,并且该值将使用正确的setter方法设置为字段。

例如,您有一个SayHelloBean,它属于请求范围:

@RequestScoped
@ManagedBean
public class LoginBean {
    private String name;
    //proper getter
    public String getName() {
        return this.name;
    }
    //proper setter
    public void setName(String name) {
        this.name = name;
    }
}
<h:form>
    Please tell me your name
    <h:inputText value="#{loginBean.name}" />
    <h:commandButton action="page2" />
</h:form>

page2.xhtml:

Hello #{loginBean.name}

这就是幕后发生的事情:

>

  • 加载page1.xhtml时,JSF将创建loginbean的新实例,我们可以称之为loginbean,并将其注册到JSP请求范围中。由于 的值绑定到loginbean#name(作为loginbean类的字段name读取),因此EL将显示loginbean#name的值(作为实例loginbean的字段name读取),并且由于该值未初始化,EL将以空字符串的形式显示null

    最后,JSF将确保通过forward导航到page2.xhtml,在处理它时,它将找到#{loginbean.name},EL将检查loginbean2#name的值并替换它。

    这里解释的步骤只是对JSF生命周期以及JSF如何使用getter和setter的一个非常小的解释(还有很多元素没有解释)。

    更多信息:

      null

  •  类似资料:
    • 问题内容: 我是JSF的新手(2)。 在Struts中,我们可以从类似的URL调用动作。这将调用一个操作并返回一个结果页面,例如JSP(最初没有JSP / HTML)。 在JSF中如何做同样的事情?(我知道如何从.xhtml调用操作),即直接从URL调用托管bean并获取结果页面。 问题答案: 您要询问的模式并不是JSF工作方式的真正本机。 像Struts和Spring MVC这样的基于请求的框架

    • 注意:这个问题可能与Vaadin有关,也可能与Vaadin无关,这取决于是否有“更好的”解决方案来“重置”bean。 背景场景 我正在构建一个用于输入一些值的向导,当这些值完成时,将发送到一个表(使用Vaadin和加载项“Wizards for Vaadin”)。 该加载项没有提供一种方法来重置向导(即返回到步骤1)而不强制调用当前steps(重写)onAdvance()和onBack()方法,这

    • 托管bean它是一个纯Java类,它包含一组属性和一组,方法。 以下是托管bean方法执行的常见功能: 验证组件的数据 处理组件触发的事件 执行处理以确定应用程序必须导航的下一页 它也可以作为JFS框架的模型。 JSF托管Bean示例 请看看下面一段示例代码 - 您可以通过以下方式使用此。 通过配置成XML文件。 通过使用注释。 通过XML文件配置托管Bean 在xml文件配置是比较旧方法。 在这

    • 主要内容:使用XML配置,使用@ManagedBean注解JSF 托管bean(Managed Bean)是JSF注册的常规Java Bean类。托管bean包含getter和setter方法,业务逻辑。JSF托管bean作为UI组件的Model。 它存储JSF xhtml页面使用的数据。借助JSF框架,可以从JSF页面访问托管Bean。 在JSF 1.2中,我们必须在JSF配置文件(如)中注册受管理的bean。 从JSF 2.0可以使用注解注册管理be

    • 我正计划将一个web应用程序从使用JSF托管bean转换为使用CDI托管bean。我知道我需要做以下工作: 在WEB-INF中添加空beans.xml文件。 将所有JSF@ManagedBean替换为CDI@Named Annotations。 用CDI或OmniFaces作用域注释替换所有JSF作用域注释。 将所有JSF@ManagedProperty替换为CDI@Inject Annotati

    • 问题内容: 我是JSP的新手。我尝试连接MySQL和我的JSP页面,并且工作正常。但是这是我需要做的。我有一个名为“ balance”的表格属性。检索它并使用它来计算一个称为“金额”的新值。(我不是在打印“余额”)。 似乎不可能在JSTL标签中插入scriptlet。 问题答案: 你不能直接在EL中调用静态方法。EL将仅调用实例方法。 对于失败的scriptlet尝试,你不能混合scriptlet