Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JSF2.0,commandButton如何知道发送此消息的bean_Jsf_Jsf 2 - Fatal编程技术网

JSF2.0,commandButton如何知道发送此消息的bean

JSF2.0,commandButton如何知道发送此消息的bean,jsf,jsf-2,Jsf,Jsf 2,我从JSF2开始,来自SpringMVC,所以我有一些疑问,我无法在核心JavaServerFacesV3上找到答案 像这个 标签h:commandButton如何知道我在谈论哪个bean?每个JSF页面只能有一个Bean,是吗?我只给它一个msg.next,它是来自i18n文件的文本。(quizbean是我的bean) #{msgs.heading} #{msgs.guessNext} #{quizBean.current.sequence} #{msgs.answer} bea

我从JSF2开始,来自SpringMVC,所以我有一些疑问,我无法在核心JavaServerFacesV3上找到答案

像这个

标签
h:commandButton
如何知道我在谈论哪个bean?每个JSF页面只能有一个Bean,是吗?我只给它一个msg.next,它是来自i18n文件的文本。(quizbean是我的bean)


#{msgs.heading}

#{msgs.guessNext}

#{quizBean.current.sequence}

#{msgs.answer}


bean必须由JSF管理,然后它将知道您在谈论哪个bean

e、 g

或者在JSF配置文件(
faces config.xml
)中提到它,如下所示-


基茨比
com.pkg.QuizBean
一场
//早期版本的JSF在注释不起作用时需要这样做
//但是如果您使用的是JSF2.0,那么使用注释会更好

在一个视图(页面)中可以使用多个bean

bean必须由JSF管理,然后它将知道您在谈论哪个bean

e、 g

或者在JSF配置文件(
faces config.xml
)中提到它,如下所示-


基茨比
com.pkg.QuizBean
一场
//早期版本的JSF在注释不起作用时需要这样做
//但是如果您使用的是JSF2.0,那么使用注释会更好

在一个视图(页面)中可以使用多个bean

如果这是一个来自
核心Java Server Faces
的示例,那么请仔细阅读,它解释了一切

msgs
据我所知,是指在faces config.xml中声明的消息包

至于您的问题,commandButton如何知道调用哪个bean。在您的示例中,类名QuizBean很可能对应于同名的bean。这对于JSF2.0来说已经足够了。但是,您可以通过两种方法更改该名称:

1) 如果您使用JSF托管bean,您应该这样做:

@ManagedBean(name="quiz")
@ViewScoped
public class QuizBean { }
2) 如果您使用CDI-bean,您将执行以下操作:

@Named("quiz")
@RequestScoped
public class QuizBean {}
记住CDIBeans范围注释来自包javax.enterprise.context。JSF作用域在javax.faces.bean包中不要混合它们

更新:
有关您的问题的更多详细信息,请参阅本书第35页,如果您不理解某些内容,请不要急于提问。

如果这是来自
Core Java Server Faces
的示例,请仔细阅读,它解释了一切

msgs
据我所知,是指在faces config.xml中声明的消息包

至于您的问题,commandButton如何知道调用哪个bean。在您的示例中,类名QuizBean很可能对应于同名的bean。这对于JSF2.0来说已经足够了。但是,您可以通过两种方法更改该名称:

1) 如果您使用JSF托管bean,您应该这样做:

@ManagedBean(name="quiz")
@ViewScoped
public class QuizBean { }
2) 如果您使用CDI-bean,您将执行以下操作:

@Named("quiz")
@RequestScoped
public class QuizBean {}
记住CDIBeans范围注释来自包javax.enterprise.context。JSF作用域在javax.faces.bean包中不要混合它们

更新:
有关您的问题的更多详细信息,请参阅本书第35页,如果您不理解某些内容,请不要急于提问。

命令按钮不需要知道这一点。它只生成一个HTML
元素。这被嵌入到HTML
中,其中一个操作URL指向与页面相同的URL。另外还有
。多亏了这个字段,JSF才确切地知道您提交给哪个视图。此视图保存有关所有输入的信息。此视图知道有一个
。视图知道生成的HTML
元素的字段
名称。JSF将使用此名称通过
request.getParameter()
获取提交的请求参数值,然后使用此值更新
quizBean
当前实例的
answer
属性


右键单击浏览器中的页面并选择View Source以查看JSF生成的HTML输出。在
applyrequestvaluespase#execute()
HtmlBasicRenderer#decode()
方法上放置一个断点(假设您使用的是Mojara而不是MyFaces)来跟踪视图中每个
UIComponent
提交值的收集

命令按钮不需要知道这一点。它只生成一个HTML
元素。这被嵌入到HTML
中,其中一个操作URL指向与页面相同的URL。另外还有
。多亏了这个字段,JSF才确切地知道您提交给哪个视图。此视图保存有关所有输入的信息。此视图知道有一个
。视图知道生成的HTML
元素的字段
名称。JSF将使用此名称通过
request.getParameter()
获取提交的请求参数值,然后使用此值更新
quizBean
当前实例的
answer
属性


右键单击浏览器中的页面并选择View Source以查看JSF生成的HTML输出。在
applyrequestvaluespase#execute()
HtmlBasicRenderer#decode()
方法上放置一个断点(假设您使用的是Mojara而不是MyFaces)来跟踪视图中每个
UIComponent
提交值的收集

因此,如果我在同一个页面中有两个bean,它将同时更新这两个bean
@ManagedBean(name="quiz")
@ViewScoped
public class QuizBean { }
@Named("quiz")
@RequestScoped
public class QuizBean {}