关于JSF中受管Bean之间的通信 [英] Regarding communication between managed bean in JSF

查看:94
本文介绍了关于JSF中受管Bean之间的通信的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

似乎我以前对托管bean的问题不清楚.因此,我将以更系统的方式再次发布它.

It seems I am not clear on my previous question about managed bean. So, I am posting it again in a more systematic manner.

我有一页:

<?xml version='1.0' encoding='UTF-8' ?>
<!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:h="http://java.sun.com/jsf/html"
      xmlns:ui="http://java.sun.com/jsf/facelets">
    <h:head>
        <title>Facelet Title</title>
    </h:head>
    <h:body>
        <ui:insert name="head">

        </ui:insert>

        <br/><br/>
        <h:inputText value="#{MasterBean.laala}"/>
        <br/><br/>

        <ui:insert name="content">

        </ui:insert>
    </h:body>
</html>

这是它的豆子:

import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;


@ManagedBean(name="MasterBean")
@ViewScoped
public class MasterBean {

    private String laala;

    public String getLaala() {
        return laala;
    }

    public void setLaala(String laala) {
        this.laala = laala;
    }


    public MasterBean() {
    }

}

这是使用master.xhtml的data.xhtml:

This is data.xhtml which uses master.xhtml:

<?xml version='1.0' encoding='UTF-8' ?>
<!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:h="http://java.sun.com/jsf/html"
      xmlns:ui="http://java.sun.com/jsf/facelets">
    <h:head>
        <title>Facelet Title</title>
    </h:head>
    <h:body>
        <ui:composition template="master.xhtml">
            <ui:define name="head">
                laala
            </ui:define>

            <h:outputText value="#{pageBean.content}"/>

            <ui:define name="content">
                <h:commandButton actionListener="#{pageBean.speakHello}"/>
            </ui:define>>


        </ui:composition>
    </h:body>
</html>

这是它的豆子:

import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;


@ManagedBean(name="pageBean")
@ViewScoped
public class pageBean {

    private String content;

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }


    public void speakHello(){
        //how do i get value of laaala here which is in MasterBean???
        content = ??? + " Hello friend";
    }

    public pageBean() {
    }

}

我应该在speakHello()中标记???的空白处输入什么.如何获得该豆中其他豆的价值?

What should I put in the blank where ??? is marked in speakHello(). How do I get value of other bean in this bean?

推荐答案

您可以在 JSF2教程可以使用依赖项注入功能.在您的情况下,这是关于将MasterBean实例注入到pageBean中.我相信您的pageBean中可以有这样的东西:

As you can learn in a JSF2 tutorial one can use the dependency injection feature. In your case it would be about injecting MasterBean instance to pageBean. I believe you could have something like this in your pageBean:

@ManagedBean(name="pageBean")
@ViewScoped
public class pageBean {

    private String content;

    @ManagedProperty(value="#{MasterBean}")
    private MasterBean masterBean;

    ...

a然后在您的方法中使用它:

a then use it in your methods:

 public void speakHello(){
    //how do i get value of laaala here which is in MasterBean???
    content = masterBean.getLaala() + " Hello friend";
 }

我还没有尝试过.我希望它能起作用.

I haven't tried that myself. I hope it will work.

顺便说一句,强烈建议不要以小写字母开头课程名称.因此,应该将pageBean类称为PageBean.

BTW, it's highly recommended not to start class name with a small letter. So pageBean class should be called PageBean instead.

这篇关于关于JSF中受管Bean之间的通信的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆