标签: facelets

JSF2:ui:include:组件ID必须是唯一的

基本问题:

包含一个页面,其中包含具有组件ID的组件,多次无法完成.但是,我如何能够在包含页面的情况下引用该组件?

例:

included.xhtml

....
<h:form id="foo"/>
....
<!-- here i need reference to foo component of this page -->
Run Code Online (Sandbox Code Playgroud)

的index.xhtml

....
<ui:include src="included.xhtml" />
<ui:include src="included.xhtml" />
<ui:include src="included.xhtml" />
Run Code Online (Sandbox Code Playgroud)

java jsf facelets jsf-2

3
推荐指数
1
解决办法
3720
查看次数

JSF2 /......registerHostUser.xhtml @ 9,9 <h:head>标记库支持命名空间:http://java.sun.com/jsf/html,但没有为name定义标记:head

我是JSF 2的新手,因为我试图做一个自己熟悉的世界示例,我遇到了这个错误,我已经尝试了很长一段时间.

堆栈跟踪

om.sun.facelets.tag.TagException: /facelets/register/host/registerHostUser.xhtml @9,9 <h:head> Tag Library supports namespace: http://java.sun.com/jsf/html, but no tag was defined for name: head
at com.sun.facelets.compiler.CompilationManager.pushTag(CompilationManager.java:193)
at com.sun.facelets.compiler.SAXCompiler$CompilationHandler.startElement(SAXCompiler.java:194)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:501)
at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.startElement(XMLDTDValidator.java:767)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.java:400)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2755)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:140)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:511)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:808)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:119)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205)
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522)
at javax.xml.parsers.SAXParser.parse(SAXParser.java:395)
at javax.xml.parsers.SAXParser.parse(SAXParser.java:198)
at com.sun.facelets.compiler.SAXCompiler.doCompile(SAXCompiler.java:232)
at com.sun.facelets.compiler.Compiler.compile(Compiler.java:105)
at com.sun.facelets.impl.DefaultFaceletFactory.createFacelet(DefaultFaceletFactory.java:218)
at com.sun.facelets.impl.DefaultFaceletFactory.getFacelet(DefaultFaceletFactory.java:149)
at com.sun.facelets.impl.DefaultFaceletFactory.getFacelet(DefaultFaceletFactory.java:100)
at com.sun.facelets.FaceletViewHandler.buildView(FaceletViewHandler.java:517)
at com.sun.facelets.FaceletViewHandler.renderView(FaceletViewHandler.java:567)
at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:121)
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:410)
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1534)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) …
Run Code Online (Sandbox Code Playgroud)

jsf glassfish facelets maven jsf-2

3
推荐指数
1
解决办法
6077
查看次数

EL条件方法表达式

我想在EL中声明一个条件方法表达式,如下所示:

<p:dataTable id="#{cc.attrs.datatableId}" var="overview" 
    rowSelectListener="#{cc.attrs.detailsMode == 'single' ? cc.attrs.bean.onRowSelect : cc.attrs.bean.onRowUrlSelect}">
Run Code Online (Sandbox Code Playgroud)

但是,它抛出一个EL异常:

javax.el.E​​LException:不是有效的方法表达式:#{cc.attrs.detailsMode =='single'?cc.attrs.bean.onRowSelect:cc.attrs.bean.onRowUrlSelect}

我如何声明条件EL方法表达式?

jsf facelets el conditional-operator methodexpression

3
推荐指数
1
解决办法
5821
查看次数

jsf h:messages/h:特定clientId的消息

我想以编程方式设置clientIds来显示不同的FacesMessages.在我看来,我用过

<h:outputText value="warnMessages #{facesContext.getMessageList('warnMessages')}" />
<h:outputText value="validationMessages #{facesContext.getMessageList('validationMessages')}" />
Run Code Online (Sandbox Code Playgroud)

用于调试.消息都在那里.但...

<h:messages for="warnMessages"  />
<h:message for="warnMessages"  />
Run Code Online (Sandbox Code Playgroud)

不显示任何内容.只要

<h:messages />
Run Code Online (Sandbox Code Playgroud)

作品.但是我希望将不同的消息框一起显示出来.我怎样才能做到这一点?谢谢

马塞尔

jsf message facelets

3
推荐指数
1
解决办法
7765
查看次数

尝试连接EL中的String时NumberFormatException

这就是我想要生成的:

<div class="marker" style="background:transparent url('/myApp/faces/javax.faces.resource/1.png?ln=images/map') no-repeat center top;"></div>
<div class="marker" style="background:transparent url('/myApp/faces/javax.faces.resource/2.png?ln=images/map') no-repeat center top;"></div>
<div class="marker" style="background:transparent url('/myApp/faces/javax.faces.resource/3.png?ln=images/map') no-repeat center top;"></div>

etc...
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

<ui:repeat value="#{myBean.items}" var="item" varStatus="status">
    <h:panelGroup layout="block" styleClass="marker" style="background:transparent url(#{resource['images/map:'+(status.index+1)+'.png']} no-repeat center top;"/>
</ui:repeat>
Run Code Online (Sandbox Code Playgroud)

这与NumberFormatException失败,因为EL解释器尝试将"images/map"转换为数字.经过相当多的搜索后,我发现+仅用于添加数字.任何想法如何达到预期的效果?

jsf facelets el jsf-2

3
推荐指数
1
解决办法
5496
查看次数

JSF模板:呈现的页面缺少DOCTYPE

TL; DR:我无法将DOCTYPE标头显示在我的JSF页面上.

我刚刚继承了一个JSF 1.2项目,它在IE下有一些显示问题.我是JSF的新手,但我认为问题源于渲染页面(来自"视图源")不包含正确的事实DOCTYPE.

页面由多个部分组成,使用多个层组合在一起<ui:composition>.典型页面如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
                template="../layout/template.xhtml">

    <ui:define name="body">
      <!-- html content goes here... -->
    </ui:define>
</ui:composition>
Run Code Online (Sandbox Code Playgroud)

然后../layout/template.xhtml有:

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
                template="./headertemplate.xhtml">

    <ui:define name="menuSelection">
        <ui:insert name="menuSelection"/>
    </ui:define>
    <ui:define name="body">
        <ui:insert name="body"/>
    </ui:define>
    <ui:define name="footer">
        <div class="footer">
            <ui:include src="footer.xhtml"/>
        </div>
    </ui:define>
</ui:composition>
Run Code Online (Sandbox Code Playgroud)

最后,headertemplate.xhtml:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
            contentType="text/html">
     <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
       <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" …
Run Code Online (Sandbox Code Playgroud)

jsf facelets

3
推荐指数
1
解决办法
4989
查看次数

如何创建自定义taglib

我想制作一个util方法,从地图转换为列表,以便与EL一起使用,这是我试过的:

1- utils.taglib.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE facelet-taglib PUBLIC
  "-//Sun Microsystems, Inc.//DTD Facelet Taglib 1.0//EN"
  "https://facelets.dev.java.net/source/browse/*checkout*/facelets/src/etc/facelet-taglib_1_0.dtd">
<facelet-taglib xmlns="http://java.sun.com/JSF/Facelet">
    <namespace>http://mycomp.com/utils</namespace>

    <function>
      <function-name>mapToList</function-name>
      <function-class>com.mycomp.MyClass</function-class>
      <function-signature>java.util.List mapToList(java.util.Map)</function-signature>
    </function>

</facelet-taglib>
Run Code Online (Sandbox Code Playgroud)

2- web.xml:我添加了它,因为我添加了spring安全标记lib,如下所示:

<context-param>
    <param-name>javax.faces.FACELETS_LIBRARIES</param-name>
    <param-value>
    /WEB-INF/springsecurity.taglib.xml
    /WEB-INF/utils.taglib.xml
    </param-value>
</context-param>
Run Code Online (Sandbox Code Playgroud)

3- xhtml页面:

xmlns:utils="http://mycomp.com/utils"

  <ui:repeat value="#{utils:mapToList(myBean.map)}" var="entry" >
    Key = #{entry.key} Value = #{entry.value} <br/>
  </ui:repeat>
Run Code Online (Sandbox Code Playgroud)

4- Util类:

public class MyClass{

    public static <T, S> List<Map.Entry<T, S>> mapToList(Map<T, S> map) {

    if (map == null) {
        return null;
    }

    List<Map.Entry<T, S>> list …
Run Code Online (Sandbox Code Playgroud)

facelets taglib java-ee jsf-2

3
推荐指数
1
解决办法
5767
查看次数

Eclipse(Juno)挂在JSF EL Expression Auto Complete上

我正在使用Eclipse Juno和JSF 2.1项目。

Facelets文件中的EL表达式自动完成速度非常慢。慢到我尝试使用20种左右的方法自动完成JSF Bean的地步时,Eclipse编辑器将挂起10-15秒,直到看到成员/属性列表。

从我的角度来看,我有2个解决方案,但我既不知道如何实现,因此任何帮助都会有所帮助。(优先于第一个)

  1. 解决速度慢的问题。我的猜测是,当我按ctrl-space时,Eclipse正在做很多我不需要的事情,并且如果可以禁用那些可以使其运行更快的东西。(有根据的猜测)

  2. 完全禁用El Expressions的自动完成功能并安装JBoss Tools(我必须说,它可以正常工作,但是当与本机自动完成功能结合使用时,它仍然挂在每个ctrl空间上)。

因此,任何一种解决方案都将有所帮助-解决缓慢问题一起禁用自动完成功能。

提前致谢!!

eclipse performance jsf facelets eclipse-juno

3
推荐指数
1
解决办法
1879
查看次数

从操作方法结果调用页面时不调用JSF 2 Prerenderview侦听器

我在f:metadata元素中使用prerender视图事件调用另一个页面.

如果我使用<h:link>它导航到页面工作并调用侦听器方法.

但是,如果我使用属于调用页面的托管bean的操作方法的结果导航到页面,则不会调用prerenderview中指定的侦听器(如果通过链接调用它).它会导航到第二页,只是没有监听器调用.

我真的更喜欢从action方法调用,因为我使用它来做一些工作并在会话映射中放置一个变量来使用.我不确定如何使用链接实现相同的功能.对象可能相当大...... kb不是Mb,但仍然不是我想要放在请求中的东西.

我已经尝试使调用页面请求的托管bean作用域并查看作用域.

如果从托管bean结果调用它,是不是可以获取prerenderview?正如我所说,我从一个链接开始工作.

<body>
    <ui:define name="metadata">
        <f:view>
            <f:metadata>
                <f:event type="preRenderView" listener="#{businessBean.init}" />
            </f:metadata>
        </f:view>
    </ui:define>
    <ui:composition template="#{navigationprops.soulard_2col_uprefs_template}">
Run Code Online (Sandbox Code Playgroud)

facelets jsf-2 managed-bean

3
推荐指数
1
解决办法
6195
查看次数

为什么我看不到HTML 5 <dialog>?

这是我的Facelets文件:

<!DOCTYPE html>
<html lang="en"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:h="http://java.sun.com/jsf/html">

<h:head>
    <title>Simple JSF Facelets page</title>
</h:head>

<h:body>
    Place your content here!
    <dialog>
        <dt>Sam</dt>
        <dd>Knock, Knock.</dd>
        <dt>Eric</dt>
        <dd>Who's there?</dd>
        <dt>Sam</dt>
        <dd>Justin.</dd>
        <dt>Eric</dt>
        <dd>Justin who?</dd>
        <dt>Sam</dt>
        <dd>Justin time for dinner!</dd>
    </dialog>
</h:body>
</html>
Run Code Online (Sandbox Code Playgroud)

我在浏览器中看到的只是

将您的内容放在这里!

当我检查此文件的来源时,我在chrome中看到:

<!DOCTYPE html>
<html lang="en"><head>
    <title>Simple JSF Facelets page</title></head><body>
Place your content here!
<dialog>
    <dt>Sam</dt>
    <dd>Knock, Knock.</dd>
    <dt>Eric</dt>
    <dd>Who's there?</dd>
    <dt>Sam</dt>
    <dd>Justin.</dd>
    <dt>Eric</dt>
    <dd>Justin who?</dd>
    <dt>Sam</dt>
    <dd>Justin time for dinner!</dd>
</dialog>
<ul id="javax_faces_developmentstage_messages" title="Project Stage[Development]: Unhandled Messages"></ul></body>
</html>
Run Code Online (Sandbox Code Playgroud)

那么,从源代码来看,它看起来应该是一个有效的html5文件?但是目前,我看不到对话框标签中的内容?

jsf html5 facelets

3
推荐指数
1
解决办法
2942
查看次数