Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.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
JSF中的EL变量解析:有没有方法控制何时发生?_Jsf_El_Composite Component - Fatal编程技术网

JSF中的EL变量解析:有没有方法控制何时发生?

JSF中的EL变量解析:有没有方法控制何时发生?,jsf,el,composite-component,Jsf,El,Composite Component,我经常面临以下问题。我有一个JSF应用程序和一个facelet,我在其中编写EL表达式,如下所示: <h:outputText value="#{myBean.foo}"> <myns:myCc var="myVar"> <h:inputText value="#{myVar.foo}" /> </myns> 这是行不通的,因为当调用doSomething时,项变量不再被定义(尽管它引用的对象仍然是活动的),因此它被解析为null。这是一个

我经常面临以下问题。我有一个JSF应用程序和一个facelet,我在其中编写EL表达式,如下所示:

<h:outputText value="#{myBean.foo}">
<myns:myCc var="myVar">
  <h:inputText value="#{myVar.foo}" />
</myns>
这是行不通的,因为当调用
doSomething
时,
变量不再被定义(尽管它引用的对象仍然是活动的),因此它被解析为
null
。这是一个好主意。然而,同样的模式可以很好地应用于
,例如。无论如何,我现在对这个具体问题不感兴趣,我只是想解释一下我的疑问

具体的例子。2:我已经用一个支持bean编写了一个复合组件。支持bean扩展了
UINamingContainer
,并使用其
stateheloper
来保留模型对象。此组合允许编写子标记,我想编写如下内容:

<h:outputText value="#{myBean.foo}">
<myns:myCc var="myVar">
  <h:inputText value="#{myVar.foo}" />
</myns>
因此,在页面的其余部分,我可以使用
{bean.foo}
而不是
{longname和pagespecificbean.foo}
。即使对于传递给命令按钮的操作,这也可以正常工作。但是,如果我将类似
{bean.myActionMethod}
的方法表达式传递给使用
方法签名声明的复合组件属性
,当实际调用此方法表达式时,我会收到一个错误,
bean
解析为
null
。。。为什么它在一种情况下工作(使用commandButton操作),而在另一种情况下不工作(使用复合组件使用的操作),这对我来说是一个很大的困惑


如果有人能帮助我更好地理解这个JSF方面,并通过前面提到的具体示例提出更好的方法/解决方案,我将不胜感激。

您的问题看起来太大了,但我可以说,在构建期间,只有会话和请求范围的值可用

执行阶段也是如此

只有渲染阶段才能确保时间变量“myVar”的可用性


了解其真实特性的最佳方法是调试,因为它取决于组件实现

,那么组件实现属于我的情况如何(情况2)?无论如何,在许多情况下,正是这种不确定性(需要调试才能理解事情)在挖掘JSF的生产力。事情不是以“线性”的方式进行的,因为“这取决于”。当然,除非有一条经验法则可以解释不同的行为,这是问题的核心。