当前位置: 首页 > 面试题库 >

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

姚浩歌
2023-03-14
问题内容

我具有以下复合组件(

<!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" />

当我调用Testpage时,出现以下错误:

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

我该如何解决这个问题?

Ajax-Event应该触发UI-Bean-Methode。

谢谢罗纳德


问题答案:

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

<cc:interface>
    ...
    <cc:clientBehavior name="clientEvent" targets="inputId" event="valueChange" />
</cc:interface>
<cc:implementation>
    ...
    <h:inputText id="inputId" ... />
</cc:implementation>
  • name:您将在Composite的客户端中指定的自定义事件名称。可以与实际事件名称相同。可以定做的。全部免费选择。
  • targets:应附加实际客户端行为的目标组件的组合实现相对客户端ID。
  • event:实际的事件名称,实际的客户行为应在监听。请注意,EditableValueHolder组件的默认事件是valueChange和不是change。您可以根据change需要继续使用文本输入字段。

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

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

具体问题 无关 ,复合可以更好地成为标记文件。而且,该HTML表标记不是Web 2.0。



 类似资料:
  • 问题内容: 假设我有一些要将JavaScript操作添加到的链接: 当页面加载时,我给他们所有的click事件: 但让我们说之后,我添加了另一个元素,但我想给它相同的事件。我不能这样做: 因为前三个事件将包含两个事件。处理此问题的最佳方法是什么? 问题答案: 您可以将$ .on绑定到这样的dom中始终存在的父元素。 请注意: 您可以用dom中将始终存在的元素的任何父级替换,并且父级越近越好。 具有

  • 问题内容: 我正在构建一个允许将本地文件拖放到div上的组件。然后是有关已删除文件的信息输出。 我的问题是我不知道如何正确地附加事件侦听器以及创建组件时。 我的App组件是我所有逻辑所在的地方(拖放和拖移的处理程序),我创建了一个单独的组件,该文件将被放置在该组件上-dropZone组件。 我尝试将事件侦听器放在App组件的dropZone标记上,如果放置了dropZone组件,则在该位置放置事件

  • 问题内容: 假设我有一些jQuery代码,将事件处理程序附加到class所有元素。 例如: 我的HTML可能如下所示: 没问题。但是,请考虑是否在以后的某个时间将元素写入页面。 例如: 在这种情况下,当用户单击时将创建链接。 该链接不具备与之关联的处理程序,即使它有。 基本上,我想编写一次处理程序,并将其应用于页面加载时出现的内容以及以后通过 AJAX / DHTML 引入的内容。知道我该如何解决

  • 问题内容: 我该怎么做才能将其附加到文件中而不是覆盖? 问题答案: 使用附加:

  • 问题内容: 在Linux中将文本附加到文件的最简单方法是什么? 我看了这个问题,但是可接受的答案使用了一个附加程序(),我相信应该有一个更简单的方法或类似方法。 问题答案: cat >> filename This is text, perhaps pasted in from some other source. Or else entered at the keyboard, doesn’t

  • 问题内容: 我正在尝试创建一个将条目添加到json文件的函数。最终,我想要一个看起来像 等。这就是我所拥有的: 这确实会创建一个条目,例如。但是,如果我再次使用此函数(使用不同的名称和网址),第一个函数将被覆盖。我需要怎么做才能将第二个(第三个…)条目附加到第一个? 编辑 :对此问题的第一个答案和评论已经指出了我在写块中未使用的明显事实。不过,我看不出该怎么做。例如,以下内容显然不会起作用: 问题