我正在尝试在ui:repeat循环中将tooptip附加到commandButtons。我动态地创建commandButtons的ids和工具提示的"for“属性。这会产生以下错误:
HTTP Status 500 -
type Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
javax.servlet.ServletException: Cannot find component "a_test" in view.
javax.faces.webapp.FacesServlet.service(FacesServlet.java:325)
org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:79)
root cause
javax.faces.FacesException: Cannot find component "a_test" in view.
org.primefaces.component.tooltip.TooltipRenderer.getTarget(TooltipRenderer.java:93)
org.primefaces.component.tooltip.TooltipRenderer.encodeScript(TooltipRenderer.java:66)
org.primefaces.component.tooltip.TooltipRenderer.encodeEnd(TooltipRenderer.java:35)
javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:883)
javax.faces.component.UIComponent.encodeAll(UIComponent.java:1659)
com.sun.faces.facelets.component.RepeatRenderer.encodeChildren(RepeatRenderer.java:104)
com.sun.faces.facelets.component.UIRepeat.process(UIRepeat.java:504)
com.sun.faces.facelets.component.UIRepeat.encodeChildren(UIRepeat.java:958)
javax.faces.component.UIComponent.encodeAll(UIComponent.java:1652)
javax.faces.render.Renderer.encodeChildren(Renderer.java:168)
javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:853)
javax.faces.component.UIComponent.encodeAll(UIComponent.java:1652)
javax.faces.component.UIComponent.encodeAll(UIComponent.java:1655)
com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:399)
com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131)
com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:121)
com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:313)
org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:79)
note The full stack trace of the root cause is available in the Apache Tomcat/7.0.12 logs.
Apache Tomcat/7.0.12我的jsf如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.org/ui"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets">
<h:head></h:head>
<h:form id="MyForm">
<ui:repeat var="rs"
value="#{rezervasyonBean.rezervasyonSaatleriListesi}">
<p:commandButton action="#" value="#{rs.saatAraligi}"
update="@form"
id="#{rs.saatAraligi}_test"
/>
<p:tooltip for="#{rs.saatAraligi}_test" value="test text"/>
</ui:repeat>
</h:form>
</html>rezervasyonBean.rezervasyonSaatleriListesi是as列表,rs.saatAraligi的元素是a、b、c。
我的问题是:我如何以同样的方式动态地识别ui组件和p:tooltip的"for“属性?
致以问候。
发布于 2012-11-11 08:04:42
JSF组件的ID属性在视图构建时求值,但是<ui:repeat>在视图呈现时运行,因此#{rs.saatAraligi}的求值结果为null,因此命令按钮的ID始终为_test。
只需从id和for中删除#{rs.saatAraligi}表达式即可。你在这里不需要它。JSF将自动为<ui:repeat>的迭代索引添加前缀,从而确保ID的唯一性。
<p:commandButton action="#" value="#{rs.saatAraligi}"
update="@form"
id="test"
/>
<p:tooltip for="test" value="test text"/>另请参阅:
的id属性
https://stackoverflow.com/questions/13327133
复制相似问题