JSF中的EL变量解析:有没有方法控制何时发生?
我经常面临以下问题。我有一个JSF应用程序和一个facelet,我在其中编写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。这是一个
<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的生产力。事情不是以“线性”的方式进行的,因为“这取决于”。当然,除非有一条经验法则可以解释不同的行为,这是问题的核心。