Facelet自定义标记仅适用于一个实体

时间:2013-01-21 15:02:31

标签: jsf-2 richfaces facelets

我定义了一个自定义标签,如:

<?xml version="1.0" encoding="UTF-8"?>
    <html xmlns="http://www.w3.org/1999/xhtml"
        xmlns:ui="http://java.sun.com/jsf/facelets"
        xmlns:f="http://java.sun.com/jsf/core"
        xmlns:h="http://java.sun.com/jsf/html"
        xmlns:a4j="http://richfaces.org/a4j"
        xmlns:rich="http://richfaces.org/rich"
        xmlns:composite="http://java.sun.com/jsf/composite">

        <!-- INTERFACE -->
        <composite:interface>
            <composite:attribute name="terminal" />
            <composite:attribute name="prefix" />
        </composite:interface>

        <!-- IMPLEMENTATION -->
        <composite:implementation>
            <h:panelGrid columns="3" columnClasses="titleCell">
                <h:outputLabel for="#{prefix}nodeId" value="Node Id" />
                <h:selectOneMenu id="#{prefix}nodeId"
                    value="#{cc.attrs.terminal.nodeId}"
                    converter="javax.faces.Integer">
                    <f:selectItems
                        value="#{terminalController.availableNodeIds}" />
                    <rich:validator />
                </h:selectOneMenu>
                <rich:message for="#{prefix}nodeId" id="cnodeIdMsg" />

                <h:outputLabel for="#{prefix}maxcon" value="Max Connections" />
                <h:inputText id="#{prefix}maxcon"
                    value="#{cc.attrs.terminal.maxConnections}">
                    <rich:validator />
                </h:inputText>
                <rich:message for="#{prefix}maxcon" />
            </h:panelGrid>
        </composite:implementation>
</html>

当我在rich:popupPanel

中使用它时
    <my:terminalForm prefix="c" terminal="#{newTerminal}"/>

一切正常。

在同一个文件中的另一个位置(也是rich:popupPanel)

    <my:terminalForm prefix="e" terminal="#{terminalController.editTerminal}"/>

我表单中的所有值都没有得到初始化。我怀疑表达式#terminalController.editTerminal}无法正确扩展。但是当我从自定义标签显式

中编写标签时
 <h:inputText id="#{prefix}maxcon"
                value="#{terminalController.editTerminal.maxConnections}">
                <rich:validator />
 </h:inputText>

一切都会奏效,但只使用自定义标签进行一次扩展将毫无意义。

可能出现什么问题?

有没有更有经验的人知道如何调试此问题?

1 个答案:

答案 0 :(得分:2)

前缀前面缺少cc.attrs?!