标签: facelets

为什么在请求facelet时多次调用BackingBean方法?

这些天我正在努力学习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)

java getter jsf facelets

5
推荐指数
1
解决办法
1万
查看次数

为什么这个JSF表达式不起作用?

我在.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)

这导致了某种错误.

java jsf facelets

5
推荐指数
1
解决办法
5133
查看次数

JSF2和Facelets - java.io.FileNotFoundException

我的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)

facelets jsf-2

5
推荐指数
1
解决办法
1万
查看次数

使用模板时出现<h:outputScript>目标问题

我有一个关于将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)

jsf facelets

5
推荐指数
1
解决办法
1万
查看次数

将Managed Bean设置为Composite Component中的参数

有没有办法在复合组件中设置托管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的子类型.

我甚至不确定这是可能的,但我们只是说如果有人证明我错了会很棒.

先感谢您

jsf facelets composite-component jsf-2 managed-bean

5
推荐指数
1
解决办法
4694
查看次数

JSF preRenderView调用次数太多了

我的页面/ 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)

java facelets jsf-2

5
推荐指数
1
解决办法
7869
查看次数

Javascript在JSF模板下不起作用

我正在使用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)

html javascript jsf facelets jsf-2

5
推荐指数
1
解决办法
1万
查看次数

如何在JSF中使用EL内部的HTML字符实体?

我想在组件的value属性中使用em dashh:link.

这是我的尝试(当前不起作用):

<h:link value="#{somethingHere} &mdash; #{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表达式中执行它?这样做的正确方法是什么?

facelets jsf-2

5
推荐指数
1
解决办法
3628
查看次数

JSF2 h:selectOneMenu在验证失败时显示旧值

我有一个包含少量输入字段和一个选择菜单的表单.所有字段都是必需的="true",firstName,lastName,emailAddress,密码,国家/地区.

测试用例#1:1)在所有输入字段中输入值,保留firstName字段而不输入任何值,
选择一个国家(例如:美国)并提交表单,我们可以看到所需的firstName字段的错误消息.

2)保持表单不变,保留firstName字段而不输入任何值,然后选择country to"select one",并提交表单.我们可以看到firstName和country字段的错误消息,但是在下拉列表中它没有显示"Select One",它显示美国(之前的选择).

我对输入字段有同样的问题,但我用转换器解决了.有没有办法解决这个问题.我在stackoverflow中发布了一些帖子,后来才知道这是mojarra中的一个bug.

这是我的代码......

userRegistration.xhtml

<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)

jsf facelets jsf-2

5
推荐指数
1
解决办法
3248
查看次数

表达语言随着主要表面的变化而变化5.2

使用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 primefaces jsf-2 jsf-2.2 juel

5
推荐指数
1
解决办法
1057
查看次数