<f:ajax>无法将<f:ajax>附加到非ClientBehaviorHolder父</f:ajax> </f:ajax>

时间:2010-08-22 03:24:57

标签: java jsf jsf-2

运行我的应用程序时收到以下错误:

<f:ajax> Unable to attach <f:ajax> to non-ClientBehaviorHolder parent

我的JSF:

    <h:commandButton id="submitschool" action="submit" value="Get templates" style="FONT-SIZE: medium;FONT-FAMILY: 'Rockwell';width : 128px; height : 24px;">
    <ui:repeat value="#{person.theImage}" var="item">
    <f:ajax event="change" render="image" />
    <h:graphicImage id="image" value="#{item}"/>
    </ui:repeat>
    </h:commandButton>

我正在尝试将数组中的元素返回到视图中,其中“theImage”是person类中的数组。

1 个答案:

答案 0 :(得分:17)

<f:ajax>标记只能直接嵌套在实现UIComponent接口的ClientBehaviorHolder中。 <ui:repeat>不是其中之一。

单击javadoc链接,它会告诉您:

  

所有已知的实施类:

     

HtmlBody,HtmlCommandButton,HtmlCommandLink,HtmlDataTable,HtmlForm控件,HtmlGraphicImage,HtmlInputSecret,的HtmlInputText,HtmlInputTextarea,HtmlOutcomeTargetButton,HtmlOutcomeTargetLink,HtmlOutputLabel,HtmlOutputLink,HtmlPanelGrid,HtmlSelectBooleanCheckbox,HtmlSelectManyCheckbox,HtmlSelectManyListbox,HtmlSelectManyMenu,HtmlSelectOneListbox,HtmlSelectOneMenu,HtmlSelectOneRadio

从你的问题不清楚你的意图是什么,所以我不能给出一个更具体的答案,而不是建议在这种情况下摆脱<f:ajax>。它不属于那里。也许你想把它直接放在<h:commandButton>(类型为HtmlCommandButton)中,但是你需要更改change事件,因为它对{<input type="submit">没有意义。 1}}由<h:commandButton>生成。

我认为您还想将<ui:repeat>移出<h:commandButton>,因为这也没有多大意义。把它放在<h:commandButton>旁边,而不是嵌套在里面。