如何将ajax事件附加到复合组件?

2023-11-22

我有以下复合组件 ()

<!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:composite="http://java.sun.com/jsf/composite"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:rich="http://richfaces.org/rich">

<!-- INTERFACE -->
<composite:interface>
    <composite:attribute name="baseId" required="true" />
    <composite:attribute name="size" required="true" />
    <composite:attribute name="value" required="true" />
  <composite:attribute name="align" required="false" default="" />
  <composite:attribute name="label" required="false" default="" />
  <composite:attribute name="labelStyle" required="false" default="" />
    <composite:attribute name="disabled" required="false" default="false" />
    <composite:attribute name="required" required="false" default="false" />
    <composite:attribute name="inputStyle" required="false" default="" />
    <composite:editableValueHolder name="inTxt" />
</composite:interface>

<!-- IMPLEMENTATION -->
<composite:implementation>
    <h:panelGroup id="#{cc.attrs.baseId}Dec">
        <table class="decTable" style="align:#{cc.attrs.align};" border="1">
            <tr>
                <td class="labelSize" style="vertical-align: middle;">
                  <h:outputLabel
                        id="#{cc.attrs.baseId}Lbl" for="#{cc.attrs.baseId}"
                        value="#{cc.attrs.label}" style="#{cc.attrs.labelStyle}" /></td>

                <td width="#{cc.attrs.size}">
                  <h:inputText
                        id="inTxt" value="#{cc.attrs.value}"
                        disabled="#{cc.attrs.disabled}"
                        style="width: 99%; #{cc.attrs.inputStyle}"
                        required="#{cc.attrs.required}">
                        <!-- composite:insertChildren / -->
                    </h:inputText></td>
            </tr>

            <tr>
                <td colspan="2"><h:panelGroup id="#{cc.attrs.baseId}Error">
                        <rich:message for="#{cc.attrs.baseid}">
                            <rich:tooltip id="#{cc.attrs.baseId}TT" styleClass="validError">
                                <rich:message id="#{cc.attrs.baseId}TTMsg"
                                    for="#{cc.attrs.baseId}" showDetail="false" showSummary="true" />
                            </rich:tooltip>
                        </rich:message>
                    </h:panelGroup></td>
            </tr>
        </table>
    </h:panelGroup>
</composite:implementation>

</html>

在下面的片段中,我想使用如下方式向该组件添加 事件:

    <rich:panel style="width:560px;">
        <f:facet name="header">
            <h:outputText value="Combobox "></h:outputText>
        </f:facet>
        <v2:inputText2 size="300px" baseId="baseId_txt" id="txt" label="Text:"
            value="#{testInput2.value}">
            <a4j:ajax event="change" render="dbgText"/>
        </v2:inputText2>

        <h:outputText value="#{testInput2.value}" id="dbgText"/>
    </rich:panel>
    <aj4:commandButton id="cmdOK" value="Ok"
        action="#{testInput2.cmdOk ()}" render="@form" />

当我调用测试页面时,出现以下错误:

testInput2.xhtml @23,48 <a4j:ajax> Error: enclosing composite component does not support event change

我该如何解决这个问题?

Ajax 事件应该触发 UI-Bean-Methode。

谢谢 罗纳德


您需要将其注册为复合界面中的客户端行为。

<cc:interface>
    ...
    <cc:clientBehavior name="clientEvent" targets="inputId" event="valueChange" />
</cc:interface>
<cc:implementation>
    ...
    <h:inputText id="inputId" ... />
</cc:implementation>
  • name:您在复合客户端中指定的自定义事件名称。可以与实际事件名称相同。可以是定制的。这一切都是免费的,由您选择。
  • targets:应附加实际客户端行为的目标组件的复合实现相对客户端 ID。
  • event:实际客户端行为应该监听的实际事件名称。请注意,默认事件EditableValueHolder组件是valueChange并不是change。您可以对于文本输入字段继续使用change如果你想。

通过上面的声明示例,您可以在模板客户端中使用它,如下所示:

<my:composite ...>
    <f:ajax event="clientEvent" ... />
</my:composite>

之后,您将面临第二个但不相关的问题,该问题已在此处提出并回答: 无法通过 工作.


无关对于具体问题,该组合最好是一个标记文件。而且,HTML 表格标记不是 Web 2.0。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将ajax事件附加到复合组件? 的相关文章

随机推荐

  • 如何禁用 JIT 编译器的内部函数使用?

    我正在做一些性能测试JVM 我想衡量内在函数使用的影响 我想禁用JIT对某些方法使用内在函数而不进入解释模式 有没有办法做到这一点 谢谢 Use java XX UnlockDiagnosticVMOptions XX DisableInt
  • 是否有 .NET Framework 方法可将文件 URI 转换为带驱动器号的路径?

    我正在 ASP NET 领域中寻找类似 Server MapPath 的东西 以将 Assembly GetExecutingAssembly CodeBase 的输出转换为带有驱动器号的文件路径 以下代码适用于我尝试过的测试用例 priv
  • JTable 单元监听器?

    我正在使用 JTable 每当单元格出现时我都需要收到通知 选择改变 我尝试使用 ListSelectionListener 但是 我仅在行选择更改时收到通知 如果我选择一个 同一行上的新列 我没有收到通知 我需要知道什么时候 单元格被选中
  • 无法通过 Cloud SQL 代理从 Cloud Shell By Proxy 进行连接

    我正在关注DjangoGAE 示例 但通过代理从 Google Cloud Shell 连接到 Cloud SQL 实例时遇到问题 可能与权限设置有关 因为我看到请求未授权 其他上下文 gcloud beta sql connect aut
  • spplot 图例在地图中的自定义放置

    是否可以放置 spplot spplot 多边形 图例within地图 在左下角 像这样 我能得到的最接近的是这个 我没有发布我的数据 我只是使用示例数据 所以在这种情况下 尝试将图例放在地图的左上角 data meuse grid gri
  • 通过 CSS 打印比例

    在 IE 8 和 Firefox 3 6 和 4 上 如果您转到 打印预览 则可以按百分比调整打印比例或使用 缩小以适合 CSS是否有像scale 50 这样的属性或者调整打印比例的东西 有缩放 http reference sitepoi
  • Roslyn /查找参考 - 无法正确加载工作区

    我正在尝试编写一些代码来查找任何给定方法的所有方法调用 因为我正在创建一个开源 UML 序列图工具 然而 我在跳过前几行代码时遇到了麻烦 API 似乎已经发生了巨大的变化 我似乎无法通过查看代码来推断正确的用法 当我做 var worksp
  • PageTransformer 转换中的 ViewPager 边距

    我有一个 ViewPager 其中每个视图都是一副牌上的卡片的表示 每张卡片的边框上都有一个使用 ViewPager 边距的阴影 cardsViewPager setPageMargin getResources getDisplayMet
  • 知道了矩形的两个点,如何算出另外两个点?

    大家好 我正在学习processing js 我遇到了一个数学问题 我似乎无法用我有限的几何和三角知识或维基百科的帮助来解决这个问题 我需要画一个矩形 为了绘制这个矩形 我需要知道每个角的坐标点 我所知道的只是盒子顶部和底部中点的 x 和
  • 如何仅根据第一个数字拆分字符串

    所以我有一个包含街道地址的数据集 它们的格式非常不同 例如 d lt c street1234 Street 423 Long Street 12 14 Road 18A Road 12 15 Road 1 2 由此我想创建两列 1 X 街
  • PHP 7.0 上的 Laravel 5.4:PDO 异常 - 找不到驱动程序 (MySQL)

    我在 Ubuntu 14 04 带有 Plesk 12 5 30 的 VPS 上有一个 Laravel 5 4 项目 创建数据库并设置后 env包含我运行的所需信息的文件php artisan migrate并抛出异常 照亮 数据库 Que
  • Java SockJS Spring 客户端和消息大小

    使用 SockJS java 客户端 我尝试连接到 Spring sockjs 服务器 并且收到约 20Kb 消息 无标头 的错误 1009 Javascript 库工作正常 Transport closed with CloseStatu
  • 硬件锁定许可:我应该使用哪些硬件? [复制]

    这个问题在这里已经有答案了 我最近实现了一个具有模糊匹配功能的硬件锁定许可系统 可以处理硬件中的更改 而无需重新激活 但我需要更多硬件来匹配 以确保更安全 创建更可靠的模糊匹配 现在我正在匹配以下内容 物理MAC地址 硬盘序列号 RAM 部
  • Visual Studio 2015 - Xamarin - Android - 当我尝试在 .cs 文件中执行任何操作时获取“resource.id 不包含 xxx 的定义”

    使用 Visual Studio 2015 添加其他活动 cs 和布局 axml 我对 Xamarin 和 Android 开发非常陌生 但已经使用 VB 开发了几年 现在使用 C 我在 Android 4 2 上有一个简单的应用程序 随着
  • 编写拒绝无效子模块提交的 git update 挂钩的最佳方法是什么?

    我正在尝试写一个updategit 的钩子 如果子模块被更新为子模块的上游存储库中不存在的提交 ID 则会反弹 换句话说 我想强制用户在将更改推送到子模块指针之前将更改推送到子模块存储库 一个警告 我只想测试其裸露的上游存储库与父存储库位于
  • 在没有中间类的情况下将数据插入到 JavaFX TableView

    我是 Java 程序员新手 我想将 ResultSet 数据插入到 JavaFX TableView 但我不会使用中间类 我可以将 ResultSet 行作为对象插入到 TableView 行中吗 这是我使用中间类 Unit 的代码 pub
  • Java 9 中的 JRE 文件夹在哪里?

    Java 9 中的 JRE 文件夹在哪里 我在某些网站上看到 JRE 存在于单独的分发文件夹中 但它位于哪里 JDK 和 JRE 运行时映像已在 JDK 9 中进行了重组 JDK 运行时映像不再包含 jre 子目录 重构的摘要记录在 JDK
  • Cypress 5.0 - 无法找到已安装的浏览器

    我安装了 Cypress 5 0 并安装了所有浏览器 Chrome Edge 和 FF 当我跑步时 gt npx cypress open 无法在右上角看到所有浏览器 仅显示 Electron I tried gt npx cypress
  • C++11 标准和 CUDA 6.0

    我想在 CUDA 6 0 项目中对 C 文件使用 C 11 标准 当我将 CUDA 6 0 Nsight Eclipse 设置中的编译器更改为 g 并添加 std c 11选项然后我收到很多这样的错误 error namespace std
  • 如何将ajax事件附加到复合组件?

    我有以下复合组件