0

我有一个问题,包括使用 JSF 或更好的方法更新对象!:/

这是我的页面:

<html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:h="http://java.sun.com/jsf/html"
  xmlns:ui="http://java.sun.com/jsf/facelets">
<h:head>
    <title>Listagem de mesas do restaurante</title>
</h:head>
<h:body>
    Escolha uma mesa de sua preferência:<br/>

    <ui:repeat value="#{indexBean.mesas}" var="mesa">
        <br/>Table #{mesa.numero} <h:commandButton id="reservar" value="BloqMesa" action="#{indexBean.reservaMesa(#REFERENCEDTable)}"></h:commandButton><br/>
    </ui:repeat>

</h:body>

顺便说一下,“表”不是数据库中的表,“表”是表的名称!

当我单击命令按钮时,我想更新实际行的表。真正的问题是我必须传递参数而不是#REFERENCEDTable

想法??

提前致谢

4

1 回答 1

1

首先,每个 UICommand 组件(<h:commandButton><h:commandLink>等)都必须位于<h:form>将数据发送到服务器的 a 中。您根本没有表单,因此永远不会调用该操作。请注意,使用<h:form>inside<ui:repeat>在 Mojarra 实现中存在错误。如果您使用的是 MyFaces,则不会有问题。不过,这似乎是一个使用 a 的情况<h:dataTable>

其次,您可以将mesa变量作为参数传递给您的IndexBean#reservaMesa方法。只要确保你有这个代码(或类似的)

@ManagedBean
@ViewScoped
public class IndexBean {

    private List<Mesa> mesas;

    public IndexBean() {
    }

    //getters and setters...

    public void reservaMesa(Mesa mesa) {
        //code to update a Mesa
    }
}

您可以将mesa变量传递给reservaMesaFacelet 中的方法:

<h:commandButton id="reservar" value="BloqMesa"
    action="#{indexBean.reservaMesa(mesa)}" />

最后,你可以得到这个 JSF 代码:

<h:form>
    <!-- replacing ui:repeat by h:dataTable -->
    <h:dataTable value="#{indexBean.mesas}" var="mesa">
        <h:column>
            <f:facet name="header">
                <h:outputText value="Mesas"/>
            </f:facet>
            Table #{mesa.numero}
        </h:column>
        <h:column>
            <f:facet name="header">
                <h:outputText value="Actions"/>
            </f:facet>
            <h:commandButton id="reservar" value="BloqMesa"
                action="#{indexBean.reservaMesa(mesa)}" />
        </h:column>
    </h:datatable>
</h:form>
于 2012-11-08T22:43:01.023 回答