gpt4 book ai didi

jsf-2 - JSF2.0 复合组件 actionListener

转载 作者:行者123 更新时间:2023-12-04 17:39:12 25 4
gpt4 key购买 nike

我需要一些帮助来让我的复合组件运行。我仍在学习 JSF 中的技巧,所以请原谅本文中可能显示的任何无知。

因此,我正在使用 JSF 2.0 并决定构建一个复合组件来使这个特定的代码片段可重用。该组件完美地显示所有内容,但在尝试添加 actionListener 时根本不会表现。

这是我的组件的代码

<ui:composition
xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:composite="http://java.sun.com/jsf/composite">

<composite:interface displayName="columnUpdate">
<composite:attribute name="id"
required="true"
displayName="id"
shortDescription="Id to apply to this control and its child components">
</composite:attribute>
<composite:attribute
name="value"
displayName="value"
required="true"
shortDescription="Field that will hold the new updated value.">
</composite:attribute>

<composite:attribute
name="columnName"
displayName="columnName"
required="true"
shortDescription="Value that will be applied as the column header">
</composite:attribute>
<composite:attribute
name="text"
displayName="text"
shortDescription="Text to be displayed above the field">
</composite:attribute>

<composite:actionSource name="actionEvent" targets="saveEvent"></composite:actionSource>
</composite:interface>

<composite:implementation>
<h:outputLabel value="#{cc.attrs.columnName}" onclick="showWindow('#{cc.attrs.id}')"></h:outputLabel>

<div id="#{cc.attrs.id}" class="ccColumnUpdate">
<div id="windowClose" onclick="closeWindow('#{cc.attrs.id}');" style="top: -10px;" title="Close this window">CLOSE</div>
<div>
<h:outputLabel id="lblTitle" value="#{cc.attrs.text}"></h:outputLabel>
</div>
<div>
<h:inputText id="txtValue" value="#{cc.attrs.value}"></h:inputText>
</div>
<div style="text-align:right;">
<h:commandButton id="saveEvent" value="Save"></h:commandButton>
</div>
</div>
</composite:implementation>
</ui:composition>

这是我的页面中使用该组件的代码:
<al:columnUpdate id="cuExpenseAmount" value="#{expense.columnValue}" columnName="Expense Amount" text="Set Expense Amount to:">
<f:actionListener for="actionEvent" binding="#{expense.updateColumnValue}">
<f:ajax execute="@form"></f:ajax>
</f:actionListener>
</al:columnUpdate>

这是我在 Backing Bean 上的代码:
public void updateColumnValue(ActionEvent event) throws ParseException{
//Got HERE

}

我没有收到任何错误或我在支持 bean 上设置的任何断点。任何帮助或正确方向的指针将不胜感激。

问候,

麦克风

最佳答案

我在玩了一点点和更多的搜索后找到了答案。

对复合组件的更改:
从:

<composite:actionSource name="actionEvent" targets="saveEvent"></composite:actionSource> 

<h:commandButton id="saveEvent" value="Save"></h:commandButton>

到:
<composite:attribute name="registerButtonActionListener" method-signature="void actionListener(javax.faces.event.ActionEvent)" />

<h:commandButton id="saveEvent" value="Save" actionListener="#{cc.attrs.registerButtonActionListener}">
<f:ajax execute="@this" event="click"></f:ajax>
</h:commandButton>

使用复合组件对页面的更改:
<al:columnUpdate id="cuExpenseAmount" value="#{expense.columnValue}" registerButtonActionListener="#{expense.updateColumnValue}" columnName="Expense Amount">
</al:columnUpdate>

最大的变化是在复合属性中定义方法签名。

问候,

麦克风

关于jsf-2 - JSF2.0 复合组件 actionListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8423096/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com