Jsf 2 JSF2 Viewscope验证问题
正在尝试根据下拉列表值动态显示页面。所有关联的组件都已正确呈现。当I bean位于查看范围内时,验证不会触发,而会话范围内的相同内容工作正常。是否有人可以帮助我解决此问题 下面是我的Main.xhtml代码。此页面包含dropdownlist。根据下拉值动态包含页面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.
<?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
属性包装它不会有任何帮助,因为它是在视图渲染期间进行计算的
另见: