JSF Composite 传递所有事件

JSF Composite pass all events

我想在 JSF(带有 primefaces)中创建我的自定义复合组件,它在输入前面显示一个标签并在末尾添加一条消息。

为此,这是我的源代码:

合成:

<?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:h="http://java.sun.com/jsf/html"
      xmlns:p="http://primefaces.org/ui"
      xmlns:composite="http://java.sun.com/jsf/composite">
    <composite:interface componentType="customInput">
        <composite:attribute name="label" />
        <composite:attribute name="value" />
    </composite:interface>

    <composite:implementation>
        <h:panelGrid columns="3">
            <h:outputText value="#{cc.attrs.label}:" />
            <p:inputText id="abcde" value="#{cc.attrs.value}" />
            <p:message for="abcde" />
        </h:panelGrid>
    </composite:implementation>
</html>

支持 bean:

@FacesComponent(value = "customInput")
public class CustomInput extends InputText implements NamingContainer {
    @Override
    public String getFamily() {
        return UINamingContainer.COMPONENT_FAMILY;
    }
}

到目前为止,还不错。现在我想使用 p:inputText 组件继承的事件。例如:

<pch2:PchInputText2 label="Name" id="test2" value="#{testBean.test}">
    <p:ajax event="blur" listener="#{chantierFormBean.updateMap()}" />
    <p:ajax event="change" listener="#{chantierFormBean.updateMap()}" />
</pch2:PchInputText2>

我知道我可以通过添加

来传递这些事件
<composite:clientBehavior name="change" event="change" targets="abcde" />

到 composite:interface 部分,但我必须为每个事件(将来)添加一个客户端行为。难道没有一种方法可以传递 primefaces inputtext 继承的所有事件吗?

提前致谢

这不可能。

复合材料首先不是这项工作的正确工具。它的主要目的并不是干掉和重构重复的 XHTML 代码。它旨在创建一个绑定到单个模型值的全新(输入)组件。例如,<p:fileUpload><p:imageCropper> 一起绑定到单个 com.example.Image 属性。或者三个 <p:selectOneMenu> 一起绑定到一个 java.time.LocalDate 属性。

改用标记文件。

<ui:composition ...>
    <h:outputLabel for="#{id}" value="#{label}:" />
    <p:inputText id="#{id}" value="#{value}">
        <ui:insert />
    </p:inputText>
    <p:message for="#{id}" />
</ui:composition>

另请参阅:

  • How to make a grid of JSF composite component?
  • When to use <ui:include>, tag files, composite components and/or custom components?