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

如何在JSF中形成@named Backing Bean

封飞
2023-03-14

我在某个地方读到,使用CDI@named而不是JSF@managedbean更好,因为有CDI,所以我尝试转换一些代码。我试图在JSF中使用@named,但总是无法实现。当使用@managedbean时,没有任何问题。

package com.wordpress.marczykm.backing;

import javax.ejb.EJB;
import javax.enterprise.context.RequestScoped;
import javax.inject.Named;

@Named("customer")
@RequestScoped
public class CustomerBacking {

    @EJB
    private CustomerService customerService;

    public CustomerBacking() {
    }

    public String addCustomer(Customer customer) {
        customerService.addCustomer(customer);
        return "customer_overview";
    }

    public Customer getCustomer(){
        return customerService.getCustomer();
    }
}

index.xhtml

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    <html xmlns="http://www.w3.org/1999/xhtml"
        xmlns:ui="http://java.sun.com/jsf/facelets"
        xmlns:h="http://java.sun.com/jsf/html"
        xmlns:f="http://java.sun.com/jsf/core">

    <h:head>
        <title>EJB 3.0 Test</title>
    </h:head>
    <h:body>
        <h:outputText value="#{customer.firstname}"/>
        <h:form>
            <h:outputText value="Imię"/>
            <h:inputText id="firstname" name="firstname" value="#{customer.firstname}" /><br/>

            <h:outputText value="Nazwisko"/>
            <h:inputText id="lastname" name="lastname" value="#{customer.lastname}" /><br/>

            <h:commandButton value="Dodaj" actionListener="#{customer.addCustomer}"/>
        </h:form>
</h:body>
</html>

共有1个答案

胥宏义
2023-03-14

总之,查看Netbeans示例CDI应用程序,需要通过JSF页面访问的bean需要:

  • 有@named注释(javax.inject.named)
  • 有范围注释(如@sessionscoped、@requestscoped、@viewscoped),但从javax.enterprise.context.*导入
  • 不必具有空的非参数构造函数
  • 我的代码中没有的是,bean需要实现Serializable(java.io.Serializable)
  • 最后一点是,如果您的应用程序是web应用程序,它需要在WEB-INF目录中有一个beans.xml(可以完全为空),如果是bean应用程序,它必须在META-INF目录中
 类似资料:
  • 问题内容: 情况:我有一个JavaServer Faces页面和一个会话范围的托管bean,它具有两个属性:一个用于保存可能值的列表,另一个用于保存所选值的列表。在JSF页面上,有一个绑定了这两个属性的组件。 问题:提交表单后,选定的值将转换为字符串(ArrayList类型的属性实际上包含几个字符串!);但是,当我使用转换器时,出现如下错误消息: 验证错误:值无效 问题:如何将属正确绑定到组件?

  • 本文向大家介绍如何形成BFC?相关面试题,主要包含被问及如何形成BFC?时的应答技巧和注意事项,需要的朋友参考一下 根元素 float的值不为none overflow的值不为visible display的值为inline-block、table-cell、table-caption position的值为absolute或fixed

  • 问题内容: 我了解托管bean的工作方式类似于控制器,因为你的唯一任务是将“视图层”与模型“链接”。 要将bean用作托管bean,我必须声明注释,这样我就可以直接与bean通信JSF。 如果要在此managedBean中注入某些组件(来自Spring),则有两种可能的方法: 在ManagedBean中选择属性(例如“ BasicDAO dao”),然后在该属性上方进行声明。这样做,我是将”bas

  • 我理解托管bean的工作方式类似于控制器,因为您唯一的任务是将视图层与模型“链接”。 要将bean用作托管bean,我必须声明注释,这样我就可以直接与bean进行JSF通信。 如果我想在这个managedBean中注入一些组件(来自Spring),我有两种可能的方法: > 选择ManagedBean中的属性(如“basicdao dao”)并在该属性上方声明。为此,我在ManagedBean中注入

  • 如何集成Spring和JSF?我跟踪了Spring文档(关于这个主题的文档很少),并搜索了更多文档,目前我发现了两种工作方式: 我将使用@managedbean,JSF作用域工作,但我不能使用@autowired,这个bean必须包含setter,我不确定这是否是最佳实践: 其它的呢?

  • 问题内容: 我想了解使用Dockerfile构建Docker映像所涉及的执行步骤。我在下面列出了几个问题。请帮助我了解构建过程。 用于生成映像的命令: 在步骤2中: 问题1:它表明它在ID为532ed79e6d55的容器中运行,但是此容器是用什么Docker映像形成的? 问题2:这是什么ID?是图像还是容器? 问题3:是否从中间容器中保存了多层形成的最终图像? 问题答案: 是的,Docker映像是