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

从后备bean替换托管bean实例

曹浩波
2023-03-14

在执行CRUD时,我有一个RequestScope票据bean。

我有一个XHTML页面,直到现在我一直在使用它来创建新的票据;票证字段直接填充(#{ticket.description}等等)

现在我有了一个搜索表单,它列出了票证,每个票证都有一个以票证id为参数的链接。我希望支持bean从EJB/JPA(已经完成)检索票证bean并将其放入请求中。我认为有三种方法可以做到这一点:

  • 将从JPA检索到的bean中的数据复制到注入提供的bean中。难看/容易被遗漏

有没有更干净更合适的方法来做我想做的事?

提前谢谢。

更新:改写我想要的,再补充一点信息。我在页面P1中有一个commandLink,它在backingbeanB1中调用actiona<代码>B1执行其逻辑并重定向到页面P2。我想在动作a中设置一个(请求范围)beanB2,并且B2将可用于绘制P2

通过实验,我发现在离开actionA之后,框架创建了一个新的B2请求范围bean,因此看起来请求范围比我预期的要短。

Damian使用的flash作用域看起来更像我想要的,但它迫使我围绕#{flash}重新设计页面,并且(当我想使用它创建一个新bean时),我还必须以动作方法将bean添加到flash中(目前它只是转到页面,托管bean可用)

我希望在以后维护一个请求范围的bean

共有1个答案

易修洁
2023-03-14

要在另一个页面中查看票据,您可以执行以下操作之一:
1)使用h: link和包含票据ID的f: param

<h:link value="#{ticket.description}" outcome="/viewTicket" >
    <f:param name="id" value="#{ticket.id}" /
</h:link>

然后在view Ticket.xhtml(或任何称为页面的内容)中读取ID参数,并从JPA获取票证。

这就是管理的基本样子:

@ManagedBean
@ViewScoped
public class ViewTicketMBean implements Serializable {

    private String ticketId;
    private Ticket ticket;

    @PostConstruct
    public void init() {
        ticketId = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("id");
        // read ticket from JPA by ID
    }

}

2)代替h: link,如果您不想公开票证ID,您可以使用命令链接,在导航到view Ticket.xhtml之前,它从JPA获取票证并将其放入闪存范围。然后,在view Ticket中,您可以从闪光灯范围中获取票。这就是命令链接的操作方法的样子

Ticket ticket = null;
// get ticket from JPA    
FacesContext.getCurrentInstance().getExternalContext().getFlash().put("ticket", ticket);
return "/viewTicket";
 类似资料:
  • 主要内容:使用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

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

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

  • 我使用JSF和托管Beans创建了一个简单的应用程序。从托管bean,我试图实例化一个将数据存储到数据库的spring bean。然而,“@autowired”注释似乎不起作用,因为我得到了一个nullpointerexcpetion。我阅读了关于如何在Spring中使用JSF和托管bean的所有相关主题,但不能解决这个问题。也许有人可以看看下面的代码,给我一个提示? 服务Bean faces.c

  • 主要内容:实例,运行测试结果以下代码显示了如何进行bean注入。 我们先定义一个消息bean,它有一个字符串属性来存储消息。 然后我们再定义另一个托管bean,并使用注解注入。 实例 打开 NetBean8.2,创建一个名为: InjectManagedBeans 的工程,并加入以下文件代码。 以下是文件:UserBean.java 中的代码 - 以下是是文件:index.xhtml 中的代码 - 以下是文件:Message

  • 问题内容: 这是我的工作方式 然后在 假设用户名是。然后,如果单击,将设置为Peter的用户对象,然后重定向到配置文件页面,该页面现在从中呈现信息。我只想使用创建相同的效果,因此想到了GET请求。所以我这样做 然后该方法就返回 剩下的就是创建一个servlet,捕获该,查询数据库以获取设置为重定向的对象。这是我的servlet 现在我有了,如何访问会话bean来查询数据库中的,然后访问受管Bean