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 2 JSF2 Viewscope验证问题_Jsf 2 - Fatal编程技术网

Jsf 2 JSF2 Viewscope验证问题

Jsf 2 JSF2 Viewscope验证问题,jsf-2,Jsf 2,正在尝试根据下拉列表值动态显示页面。所有关联的组件都已正确呈现。当I bean位于查看范围内时,验证不会触发,而会话范围内的相同内容工作正常。是否有人可以帮助我解决此问题 下面是我的Main.xhtml代码。此页面包含dropdownlist。根据下拉值动态包含页面 <?xml version="1.0" encoding="UTF-8"?> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:c="http://java.sun.

正在尝试根据下拉列表值动态显示页面。所有关联的组件都已正确呈现。当I bean位于查看范围内时,验证不会触发,而会话范围内的相同内容工作正常。是否有人可以帮助我解决此问题

下面是我的Main.xhtml代码。此页面包含dropdownlist。根据下拉值动态包含页面

<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets">
<ui:composition template="#{templates.standard}">
<ui:define name="contentArea">
<c:choose>
<c:when test="#{testBean.value == '1'}">
<h:panelGroup>
<ui:include src="Page1.xhtml" />
</h:panelGroup>
</c:when>
<c:when test="#{testBean.value == '2'}">
<h:panelGroup>
<ui:include src="Page2.xhtml" />
</h:panelGroup>
</c:when>
</c:choose>
</ui:define>
</ui:composition>
</html>

The below Page1.xhtml will be included dynamically in Main.xhtml 

<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets">
<h:panelGroup>
<h:inputText value="#{testBean1.date}"
id="date" 
required="true" requiredMessage="Enter Valid date">
<f:validator validatorId="test.TestDateValidator" />        
</h:inputText>  
</h:panelGroup>
<h:panelGroup>
<h:message for="date"/>
</h:panelGroup>

下面的Page1.xhtml将动态包含在Main.xhtml中

视图范围的bean存储在JSF视图中。JSF视图只有在构建完成后才可用。像JSTL这样的标记处理程序在视图构建期间运行。因此,它们在JSF视图可用之前运行。因此,当您将视图范围bean的属性绑定到JSTL标记属性时,它不会引用JSF视图中的视图范围bean实例,而是引用一个新创建的实例,所有属性都设置为默认值

因此,基本上,每个请求都有两个不同的视图范围bean实例。一个用于恢复视图(每次表单提交时新创建的视图),另一个用于处理表单提交(实际存储在视图范围中的视图)

在即将发布的JSF2.2中,已经报告并修复了这个鸡蛋问题

在此之前,您最好创建一个单独的请求范围bean,并让include条件依赖于
@ManagedProperty
注入的请求参数,或者关闭部分状态保存(这可能会影响内存/性能)。请注意,
也会在视图构建期间运行,因此在JSF组件中使用
rendered
属性包装它不会有任何帮助,因为它是在视图渲染期间进行计算的

另见:

    • 视图范围的bean存储在JSF视图中。JSF视图只有在构建完成后才可用。像JSTL这样的标记处理程序在视图构建期间运行。因此,它们在JSF视图可用之前运行。因此,当您将视图范围bean的属性绑定到JSTL标记属性时,它不会引用JSF视图中的视图范围bean实例,而是引用一个新创建的实例,所有属性都设置为默认值

      因此,基本上,每个请求都有两个不同的视图范围bean实例。一个用于恢复视图(每次表单提交时新创建的视图),另一个用于处理表单提交(实际存储在视图范围中的视图)

      在即将发布的JSF2.2中,已经报告并修复了这个鸡蛋问题

      在此之前,您最好创建一个单独的请求范围bean,并让include条件依赖于
      @ManagedProperty
      注入的请求参数,或者关闭部分状态保存(这可能会影响内存/性能)。请注意,
      也会在视图构建期间运行,因此在JSF组件中使用
      rendered
      属性包装它不会有任何帮助,因为它是在视图渲染期间进行计算的

      另见:

      仅从BalusC答案更新为“使用2.1.18之前的Mojarra版本时,不要将视图范围bean的属性绑定到JSTL标记属性”,另请参见“balusc 13/Apr/13。。从2.1.18开始,我无法在2.1上重现这个问题。从这个版本开始,标记处理程序开始与视图范围的bean一起工作。我不确定是哪一个2.1.18版本也解决了2.1的问题(注意,这个问题的目标是2.2)。“只是从BalusC答案更新为“当使用2.1.18之前的Mojarra版本时,不要将视图范围bean的属性绑定到JSTL标记属性”,另请参见“BalusC 13/Apr/13”底部的注释。。从2.1.18开始,我无法在2.1上重现这个问题。从这个版本开始,标记处理程序开始与视图范围的bean一起工作。我不确定哪一个2.1.18版本准确地修复了2.1版本的问题(请注意,此票证的目标是2.2)。”