这些天我正在努力学习JSF + Facelets.我有一个BackingBean和一个Facelet xHTML页面.当我请求facelet页面(只有一次)时,会多次调用backing-bean方法.
这可能是什么原因?
我看不到什么特别的东西.提前致谢.
这是facelet:
<?xml version="1.0" encoding="UTF-8" ?>
<!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:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html" xmlns:ui="http://java.sun.com/jsf/facelets">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Insert title here</title>
</head>
<body>
<ui:composition template="index.xhtml">
<ui:define name="content">
<h:form>Name: <h:inputText id="nameFilterPattern" value="#{kundenBackingBean.nameFilterPattern}" /><h:commandButton value="Suchen"/></h:form>
<h:dataTable var="kunde" value="#{kundenBackingBean.kunden}" rowClasses="rowHighlight, rowOrdinary">
<h:column>
<f:facet name="header">
<h:outputText value="Kundennr" />
</f:facet>
<h:outputText value="#{kunde.kundenNr}"/>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Name" />
</f:facet>
<h:outputText value="#{kunde.name}"/>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Vorname" />
</f:facet>
<h:outputText value="#{kunde.vorname}"/>
</h:column> …Run Code Online (Sandbox Code Playgroud) 我在.xhtml页面上有一个简单的问题.这个表达不起作用: -
<a href="Photos.jsf?albumId=#{item.albumId}&blogId=#{PhotoAlbumsCommonBean.blogId}">
photos
</a>
Run Code Online (Sandbox Code Playgroud)
我收到这个错误: -
Error Parsing /Common/PhotoAlbums.xhtml: Error Traced[line: 20] The reference to entity "blogId" must end with the ';' delimiter.
Run Code Online (Sandbox Code Playgroud)
这导致了某种错误.
我的JSF 2项目结构如下:
root
...
WebContent
META-INF
resources
css
images
javascript
templates
commonLayout.xhtml
footer.xhtml
header.xhtml
views
main
index.xhtml
WEB-INF
index.jsp
Run Code Online (Sandbox Code Playgroud)
当我尝试在http://localhost/home/main/index.jsf查看我的页面时遇到此错误:
java.io.FileNotFoundException
at org.apache.naming.resources.DirContextURLConnection.getInputStream(DirContextURLConnection.java:381)
at com.sun.faces.facelets.impl.DefaultFaceletCache._getLastModified(DefaultFaceletCache.java:161)
at com.sun.faces.facelets.impl.DefaultFaceletCache.access$000(DefaultFaceletCache.java:62)
at com.sun.faces.facelets.impl.DefaultFaceletCache$1.newInstance(DefaultFaceletCache.java:82)
at com.sun.faces.facelets.impl.DefaultFaceletCache$1.newInstance(DefaultFaceletCache.java:79)
at com.sun.faces.util.ExpiringConcurrentCache$1.call(ExpiringConcurrentCache.java:99)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at com.sun.faces.util.ExpiringConcurrentCache.get(ExpiringConcurrentCache.java:114)
at com.sun.faces.facelets.impl.DefaultFaceletCache.getFacelet(DefaultFaceletCache.java:119)
at com.sun.faces.facelets.impl.DefaultFaceletCache.getFacelet(DefaultFaceletCache.java:62)
at com.sun.faces.facelets.impl.DefaultFaceletFactory.getFacelet(DefaultFaceletFactory.java:248)
at com.sun.faces.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:366)
at com.sun.faces.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:346)
at com.sun.faces.facelets.impl.DefaultFaceletContext.includeFacelet(DefaultFaceletContext.java:199)
at com.sun.faces.facelets.tag.ui.CompositionHandler.apply(CompositionHandler.java:155)
at com.sun.faces.facelets.compiler.NamespaceHandler.apply(NamespaceHandler.java:93)
at com.sun.faces.facelets.compiler.EncodingHandler.apply(EncodingHandler.java:82)
at com.sun.faces.facelets.impl.DefaultFacelet.apply(DefaultFacelet.java:152)
at com.sun.faces.application.view.FaceletViewHandlingStrategy.buildView(FaceletViewHandlingStrategy.java:744)
at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:100)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:313)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:306)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161)
at …Run Code Online (Sandbox Code Playgroud) 我有一个关于将jquery库与JSF 2.0集成的问题
使用时<h:outputScript library="/common/js" name="jquery-1.5.1.min.js" target="head" />,我应该<h:head>在我的xhtml文件中包含标签.所以脚本呈现在头部.
但我有一个包含<h:head>,<h:body>部件的template.xhtml .如何target="head" />为我的页面制作这个模板ui:composition="template.xhtml"?
target=form> 也没用.
我的模板:
<?xml version='1.0' encoding='UTF-8' ?>
<!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:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.prime.com.tr/ui"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
<h:head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title><h:outputText value="#{msg['label.titlemsg']}" /></title>
<h:outputStylesheet library="css" name="style.css" target="head"/>
</h:head>
<h:body>
<f:view locale="#{localeBean.locale}">
<div id="outer">
<div id="container">
<div id="inner">
<div class="float">
<div class="main">
<!-- -->
<div id="icerik">
<ui:insert name="icerik">
</ui:insert>
</div></div></div></div></div></div>
<div id="langbar" align="center">
</div> …Run Code Online (Sandbox Code Playgroud) 有没有办法在复合组件中设置托管bean参数,然后让使用类来决定使用哪个实际托管bean?
类似的东西: comp.xhtml
<cc:interface>
<cc:attribute name="price" />
<cc:param name="pageBean" value="#{superBean}" />
<cc:interface>
<cc:implementation>
<h:outputText value="#{cc.attrs.price}"/>
</cc:implementation>
Run Code Online (Sandbox Code Playgroud)
然后,在使用页面中
<ezcomp:comp pageBean="actualBean"
price="#{actualBean.price}" >
</ezcomp:comp>
Run Code Online (Sandbox Code Playgroud)
在我的例子中,ActualBean是SuperBean的子类型.
我甚至不确定这是可能的,但我们只是说如果有人证明我错了会很棒.
先感谢您
我的页面/ bean的preRenderView事件在第一页加载时被触发两次,然后2 + n每次回发被触发,其中n是已经发生的回发数(包括当前的回发数).
在这里阅读了一些其他帖子后,我搬到了<f:event type="preRenderView" listener="myBean.preRenderView"/>外面,<f:metadata/>这减少了preRenderView一个电话的数量.也就是说,在整页加载和1 + n每次回发的时间上调用一次.我甚至试图将<f:event/>标签移到外面<f:view/>,但它没有效果.
我不确定这是否相关:页面使用模板:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:fb="http://www.facebook.com/2008/fbml">
<f:view contentType="text/html">
<ui:insert name="metadata"/>
<h:head>
<!-- Some stuff here -->
<ui:insert name="content"/>
<!-- More stuff here -->
</h:head>
<h:body>
</h:body>
</f:view>
</html>
Run Code Online (Sandbox Code Playgroud)
以及页面的相关位:
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets">
<h:head>
<title></title>
</h:head>
<h:body>
<ui:composition template="/WEB-INF/templates/myLayout.xhtml">
<ui:define name="windowTitle">My Page</ui:define>
<ui:define name="metadata">
<f:event type="preRenderView" listener="#{myBean.preRenderView}"/>
</ui:define>
<ui:define …Run Code Online (Sandbox Code Playgroud) 我正在使用JSF模板和Primefaces.
Javascript代码似乎不适用于ui:composition和ui:define标签.以下代码未命中loaded()方法.这是content.xhtml文件
<h:head>
<script language="javascript">
function loaded() {
alert("Working!!");
}
</script>
</h:head>
<ui:composition template="/template/template.xhtml">
<ui:define name="content">
<h:body style="width:100%;height:100%;" onload="loaded()">
<p class="item">Random text</p>
</h:body>
</ui:define>
</ui:composition>
Run Code Online (Sandbox Code Playgroud)
但是当我删除define和composition标签时,会调用加载的函数.知道为什么会这样吗?
这是模板文件
<!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:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui">
<h:head>
<title><ui:insert name="title">Template</ui:insert></title>
</h:head>
<h:body>
<div id="header">
<ui:insert name="header">
<ui:include src="../menu.xhtml" />
</ui:insert>
</div>
<div id="content">
<ui:insert name="content">
<ui:include src="../content.xhtml" />
</ui:insert>
</div>
<div id="footer">
<ui:insert name="footer">
This is a footer
</ui:insert>
</div>
Run Code Online (Sandbox Code Playgroud)
我想在组件的value属性中使用em dashh:link.
这是我的尝试(当前不起作用):
<h:link value="#{somethingHere} — #{anotherHere}">
<f:param name="identifier" value="#{somethingHere.identifier}" />
</h:link>
Run Code Online (Sandbox Code Playgroud)
这导致FaceletsException:
FaceletException: Error Parsing /index.xhtml: Error Traced[line: 13]
The entity "mdash" was referenced, but not declared.
at com.sun.faces.facelets.compiler.SAXCompiler.doCompile(SAXCompiler.java:394)
...
Run Code Online (Sandbox Code Playgroud)
我知道我可以使用HTML锚点,但是有没有办法在EL表达式中执行它?这样做的正确方法是什么?
我有一个包含少量输入字段和一个选择菜单的表单.所有字段都是必需的="true",firstName,lastName,emailAddress,密码,国家/地区.
测试用例#1:1)在所有输入字段中输入值,保留firstName字段而不输入任何值,
选择一个国家(例如:美国)并提交表单,我们可以看到所需的firstName字段的错误消息.
2)保持表单不变,保留firstName字段而不输入任何值,然后选择country to"select one",并提交表单.我们可以看到firstName和country字段的错误消息,但是在下拉列表中它没有显示"Select One",它显示美国(之前的选择).
我对输入字段有同样的问题,但我用转换器解决了.有没有办法解决这个问题.我在stackoverflow中发布了一些帖子,后来才知道这是mojarra中的一个bug.
这是我的代码......
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core" >
<h:body>
<h:form id="registrationForm">
<h:messages layout="table" infoClass="infoMsgs" errorClass="errMsgs"/>
<table>
<tr>
<td>First Name:</td>
<td>
<h:inputText size="40" maxlength="100"
required="true"
styleClass="#{component.valid ? '' : 'text_error'}"
value="#{registrationAction.firstName}" />
</td>
</tr>
<tr>
<td>Last Name:</td>
<td>
<h:inputText size="40" maxlength="100"
required="true"
styleClass="#{component.valid ? '' : 'text_error'}"
value="#{registrationAction.lastName}" />
</td>
</tr>
<tr>
<td>Email Address:</td>
<td>
<h:inputText size="40" maxlength="100"
required="true"
styleClass="#{component.valid ? '' : 'text_error'}"
value="#{registrationAction.emailAddress}" />
</td>
</tr>
<tr>
<td>Password:</td>
<td>
<h:inputSecret size="20" maxlength="15" …Run Code Online (Sandbox Code Playgroud) 使用primefaces 5.1,在托管bean中只引用一个getter是没有问题的
<ui:param name="curSearch" value="#{searchBL.getSelectedSearch()}" />
Run Code Online (Sandbox Code Playgroud)
改为primefaces 5.2.2我必须这样做
<ui:param name="curSearch" value="#{searchBL.selectedSearch}" />
Run Code Online (Sandbox Code Playgroud)
并提供一个吸气剂和一个二传手.为什么?
例外:
09:35:29,178 SEVERE [javax.enterprise.resource.webcontainer.jsf.application] (http-/0.0.0.0:9090-6) Error Rendering View[/views/main.xhtml]: javax.el.ELException: /sections/search/searchOptions.xhtml @23,111 value="#{curSearch.sortPropertyName}": /sections/search/firstSearchTab.xhtml @44,53 value="#{curSearch}": /sections/searchMaskContent.xhtml @38,74 value="#{searchBL.getSelectedSearch()}": Cannot find method 'getSelectedSearch' in 'class SearchBL$Proxy$_$$_WeldClientProxy'
at com.sun.faces.facelets.el.TagValueExpression.getType(TagValueExpression.java:103) [jsf-impl-2.2.10.jar:2.2.10]
at org.primefaces.el.ValueExpressionAnalyzer.intercept(ValueExpressionAnalyzer.java:69) [primefaces-5.2.2.jar:5.2.2]
at org.primefaces.el.ValueExpressionAnalyzer.getReference(ValueExpressionAnalyzer.java:27) [primefaces-5.2.2.jar:5.2.2]
at org.primefaces.metadata.BeanValidationMetadataExtractor.extractPropertyDescriptor(BeanValidationMetadataExtractor.java:64) [primefaces-5.2.2.jar:5.2.2]
at org.primefaces.metadata.BeanValidationMetadataExtractor.extractConstraintDescriptors(BeanValidationMetadataExtractor.java:51) [primefaces-5.2.2.jar:5.2.2]
at org.primefaces.metadata.BeanValidationMetadataExtractor.extractDefaultConstraintDescriptors(BeanValidationMetadataExtractor.java:46) [primefaces-5.2.2.jar:5.2.2]
at org.primefaces.component.outputlabel.OutputLabelRenderer.isNotNullDefined(OutputLabelRenderer.java:139) [primefaces-5.2.2.jar:5.2.2]
at org.primefaces.component.outputlabel.OutputLabelRenderer.encodeEnd(OutputLabelRenderer.java:121) [primefaces-5.2.2.jar:5.2.2]
at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:919) [jsf-api-2.2.10.jar:2.2]
at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeRecursive(HtmlBasicRenderer.java:312) [jsf-impl-2.2.10.jar:2.2.10]
at com.sun.faces.renderkit.html_basic.GroupRenderer.encodeChildren(GroupRenderer.java:114) [jsf-impl-2.2.10.jar:2.2.10]
Run Code Online (Sandbox Code Playgroud)
我用的是JUEL EL,也许这就是问题所在?
facelets ×10
jsf-2 ×7
jsf ×6
java ×3
getter ×1
html ×1
javascript ×1
jsf-2.2 ×1
juel ×1
managed-bean ×1
primefaces ×1