gpt4 book ai didi

java - :ajax listener not fired for h:selectBooleanCheckbox

转载 作者:行者123 更新时间:2023-11-30 04:51:47 25 4
gpt4 key购买 nike

该事件不会在我的 Controller 中触发。这是代码。

查看:

<ui:repeat var="operation" value="#{trade.operationsSortList}">
<tr class="operations">
<th class="empty_cell"></th>
<td id="operation" class="operation_cell color">#{operation.operation}</td>
<td class="color">#{operation.time}</td>
<td class="color">#{operation.coment}</td>
<td class="color">
<h:form>
<h:selectBooleanCheckbox>
<f:ajax event="click" listener="#{controller.onDelete}" />
<f:attribute name="trade" value="#{trade}" />
</h:selectBooleanCheckbox>
</h:form>
</td>
</tr>
</ui:repeat>

Controller :

@ManagedBean
@RequestScoped
public class Controller
{
private ArrayList trades;
.....
.....

public void onDelete(AjaxBehaviorEvent event) {
Trade trade = (Trade) event.getComponent().getAttributes().get("trade");
}
}

提前致谢!

编辑:

我得到了这个工作,但我仍然有问题,因为我有表格,所以我需要将表格包装在表单标签中,所以我将整个 View 包含在表单标签中。我的目标只是将单击的复选框发送到服务器!请求被发送到服务器,但监听器不会被调用。 javascript 事件被调用。这是代码:

查看:

   <h:form>
<table id="trades">
<th class="image_cell"></th>
<th>Type</th>
<th>Portfolio</th>
<ui:repeat var="trade" value="#{controller.errorTrades}">
<tr class="trade error">
<td class="image_cell error"><h:graphicImage styleClass="expandable" url="resources/images/plus.png"></h:graphicImage></td>
<td id="type" class="error">#{trade.type}</td>
<td class="error">#{trade.portfolio}</td>
</tr>
<tr class="operations">
<td id="#{trade.murexId}" class="operation_row" colspan="4">
<table id="operations">
<tr class="header">
<th class="empty_cell"></th>
<th class="operation_cell">Operation</th>
<th>Time Transaction</th>
<th>Comment</th>
<th id="delete">Delete</th>
</tr>
<ui:repeat var="operation" value="#{trade.operationsSortList}">
<tr class="operation">
<th class="empty_cell"></th>
<td id="operation" class="operation_cell color">#{operation.operation}</td>
<td class="color">#{operation.time}</td>
<td class="color">#{operation.coment}</td>
<td class="color checkbox">
<h:selectBooleanCheckbox title="delete">
<f:ajax execute="@this" event="click" listener="#{controller.onDelete}" onevent="onDeleteProcess" />
<f:attribute name="murexId" value="#{trade.murexId}" />
<f:attribute name="operationId" value="#{operation.id}" />
</h:selectBooleanCheckbox>
</td>
</tr>
</ui:repeat>
</table>
</td>
</tr>
</ui:repeat>
</table>
</h:form>

Controller :

@ViewScoped
public class Controller
{
private ArrayList trades;
private ArrayList errorTrades = new ArrayList();

.......code

public boolean onDelete(AjaxBehaviorEvent event)
{
long murexId = 0;
BigDecimal operationId = null;
boolean result = false;
Trade trade;
Iterator itop;
Operation operation;
......code

return true;
}
}

解决这个问题对我来说非常重要。

谢谢!

最佳答案

关于解决方案的一些评论:

ui:repeat 中有 html 表格行。为此,您应该使用 h:dataTable

h:selectBooleanCheckbox 没有 value 属性。如果您想调用操作方法,您最好使用 h:commandLinkh:commandButton。那么您就不需要 f:attribute 并且可以执行如下操作:

<h:commandLink value="Delete" action="#{controller.delete(trade)}"/>

在你的支持 bean 中:

public void delete(Trade trade) {
// delete action
}

此外,每一行都有一个表格。也许 table 周围还有另一种包装形式。这是无效的,并且可能是导致意外行为的原因。如果您使用 ajax,您只需在表格周围仅使用一种形式并渲染/执行您喜欢的部分。

关于java - :ajax listener not fired for h:selectBooleanCheckbox,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9670700/

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