相关疑难解决方法(0)

何时使用<ui:include>,标记文件,复合组件和/或自定义组件?

我最近开始使用带有Facelets的JSF 2.0,并且对于了解<ui:include>Facelets 1.x提供的现有和其他模板技术的新复合组件感到困惑.

这些方法有什么区别?从功能上看,它们似乎提供了相同的:<ui:param>vs <cc:attribute>,<ui:insert>+ <ui:define>vs标记文件,重用现有模板.除了复合组件的语法和清晰的接口规范之外还有什么吗?性能会有所不同?

facelets tagfile custom-component composite-component jsf-2

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

JSF复合组件 - 尝试保存状态时的奇怪行为

我正在使用Glassfish 3.2.2和JSF 2.1.11

我正在尝试创建一个复合组件,它将字符串和最大字符数作为参数,然后只显示最大字符数,但它旁边会有一个"更多"链接,单击时会显示将文本扩展为完整长度,然后在其旁边显示"less"链接,将其恢复为最大字符数.

我看到一些奇怪的行为,所以我想知道我做错了什么.

这是我的复合组件定义:

<html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:composite="http://java.sun.com/jsf/composite"
  xmlns:h="http://java.sun.com/jsf/html"
  xmlns:fn="http://java.sun.com/jsp/jstl/functions"
  xmlns:p="http://primefaces.org/ui">
<composite:interface componentType="expandableTextComponent">
    <composite:attribute name="name" required="true"/>
    <composite:attribute name="maxCharacters" required="true"/>
    <composite:attribute name="value" required="true"/>
</composite:interface>

<composite:implementation>
    <h:panelGroup id="#{cc.attrs.name}">
        <h:outputText value="#{fn:substring(cc.attrs.value, 0, cc.attrs.maxCharacters)}" rendered="#{fn:length(cc.attrs.value) le cc.attrs.maxCharacters}"/>

        <h:outputText value="#{fn:substring(cc.attrs.value, 0, cc.attrs.maxCharacters)}" rendered="#{fn:length(cc.attrs.value) gt cc.attrs.maxCharacters and !cc.expanded}" style="margin-right: 5px;"/>
        <h:outputText value="#{cc.attrs.value}" rendered="#{fn:length(cc.attrs.value) gt cc.attrs.maxCharacters and cc.expanded}" style="margin-right: 5px;"/>
        <p:commandLink actionListener="#{cc.toggleExpanded()}" rendered="#{fn:length(cc.attrs.value) gt cc.attrs.maxCharacters}" update="#{cc.attrs.name}">
            <h:outputText value="#{__commonButton.more}..." rendered="#{!cc.expanded}"/>
            <h:outputText value="#{__commonButton.less}" rendered="#{cc.expanded}"/>
        </p:commandLink>
</h:panelGroup>
</composite:implementation>
</html>
Run Code Online (Sandbox Code Playgroud)

这是Java组件:

@FacesComponent("expandableTextComponent")
public class ExpandableTextComponent extends UINamingContainer
{
    boolean expanded; …
Run Code Online (Sandbox Code Playgroud)

composite-component jsf-2 state-saving

2
推荐指数
1
解决办法
1876
查看次数

关于UI组件状态和阶段的几个问题

经历了这些优秀的帖子:

为什么JSF会在服务器上保存UI组件的状态?

为什么JSF保存组件树状态?

在JavaEE6教程的中途,我仍然有以下问题:

  1. 当我开发一个自定义UI组件,其值(styleClass,value等)是静态定义的(在xhtml中)或通过bean设置时,我是否还需要在扩展组件中显式保存/恢复状态?
  2. 说UI组件的范围是视图作用域是否正确?
  3. 视图如何识别行为?(如果我离开视图,视图将在下一次重建.但是如果我打开另一个选项卡,它将被恢复 - 至少是bean!)
  4. 当我执行Ajax调用时,我希望UI组件的"执行"部分将被恢复和处理,并且"渲染"部分将被恢复和更新.在遇到UI的一些问题之后:重复,不清楚组件树的恢复范围以及是否可以部分编辑.作为一个例子(我不确定它是这样工作的):我定义了一个UI:重复迭代某些值并创建一些Ajax命令链接.每当我调用该命令时,无论我定义的Ajax范围(执行/渲染)如何,它都将恢复整个ui:repeat.所以它将重新渲染整个ui:重复.此外,我不明白它是如何永远不能恢复ui:repeat因为它是一个命名容器,它将编辑我新添加的组件的id.
  5. 如何定义构建时组件(vs渲染时)以及为什么要这样做?(与渲染时混合似乎构建时间组件很麻烦,为什么两者都有)

谢谢

jsf jsf-2

0
推荐指数
1
解决办法
1268
查看次数