ogo*_*gok 1 jsf facelets uirepeat uiinclude
我想通过使用<ui:repeat>
和<p:dialog>
使用创建动态对话框窗口<ui:include>
.但是当我尝试下面的时候有一个例外.
main.xhtml
<p:outputPanel id="windowsPanel" layout="block" style="width:100%;">
<p:outputPanel rendered="#{mainView.dynamicWindows ne null}">
<ui:repeat var="item" value="#{mainView.dynamicWindows}">
<p:dialog binding="#{item.dialog}">
<ui:include src="#{item.includedWindowPath}" />
</p:dialog>
</ui:repeat>
</p:outputPanel>
</p:outputPanel>
Run Code Online (Sandbox Code Playgroud)
MainView.java
@ManagedBean(name = "mainView")
@SessionScoped
public class MainView extends BaseView {
private static final long serialVersionUID = -6291834350102049312L;
private List<Window> dynamicWindows;
@PostConstruct
public void init() {
fillWindows();
}
private void fillWindows() {
dynamicWindows = new ArrayList<Window>();
for (int i = 0; i < 3; i++) {
Window window = new Window("Header " + i);
window.getDialog().setId("_dynamicWindow" + i);
window.getDialog().setWidgetVar("_dynamicWindowWidget" + i);
dynamicWindows.add(window);
}
}
// getters & setters
Run Code Online (Sandbox Code Playgroud)
例外:
javax.servlet.ServletException: /main.xhtml @33,42 binding="#{item.dialog}": Target Unreachable, identifier 'item' resolved to null
javax.faces.webapp.FacesServlet.service(FacesServlet.java:422)
org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:79)
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:369)
org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:109)
org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381)
org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:97)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381)
org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:100)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381)
org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:78)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381)
org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381)
org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:35)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381)
org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:187)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381)
org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381)
org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:79)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381)
org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:168)
org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237)
org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
Run Code Online (Sandbox Code Playgroud)
它<ui:include>
是一个在视图构建期间运行的标记处理程序,而<ui:repeat>
它是在视图渲染时运行的UI组件.标记处理程序生成JSF UI组件树.JSF UI组件生成HTML.它们不会同步运行.
因此,当<ui:include>
运行时,#{item}
指定的运行在<ui:repeat var>
范围内根本不可用,因为当时<ui:repeat>
没有运行.您需要一个迭代标记处理程序而不是迭代的JSF UI组件.JSTL <c:forEach>
就是这样的.更换<ui:repeat>
的<c:forEach>
应该可以解决这个问题.然而,它可能具有不希望的副作用.由于您的具体功能要求尚不完全清楚,因此很难预先说出来.
归档时间: |
|
查看次数: |
7440 次 |
最近记录: |