java - 如何从 Primefaces 的子表中调用方法?

标签 java jsf primefaces

我使用 primefaces 的时间不长,我发现我无法使用 <p:commandButton />因为它只是无法到达该方法,该方法是可以的,我在表(和子表)中尝试了它,它在那里工作得很好(一切都在表单内),问题是我需要用户能够选择所有子表,所以,我想也许可以使用一个按钮,但似乎子表不允许这样做,我可以通过其他方式做到这一点吗?或者也许我必须使用另一种方式从子表调用我的方法,有人知道吗?

谢谢

我的一些代码

<h:form>
    <p:messages id="messages" showDetail="true" autoUpdate="true" closable="true" />  
    <p:dataTable id="case" var="ticket" value="#{CaseBean.selectedCase.tickets}">
        <p:columnGroup>
            <p:row>
                <p:column> Action:</p:column>
                <p:column>
                    <!-- This doesn't work, removed. -->
                    <p:commandButton value="Aprove" action="#{CaseBean.acept()}">
                    </p:commandButton>
                </p:column>
            </p:row>
        </p:columnGroup>

        <p:subTable var="detail" value="#{ticket.detail}">
            <f:facet name="header">
                Resume:
            </f:facet>
            <!-- some data... -->
            <p:column>
                <!-- doesn't work either -->
                <p:commandButton value="Aprove" action="#{CaseBean.aceptTicket()}">
                </p:commandButton>
            </p:column>
<!-- show my data -->

该表工作完美,它显示了所有数据,日志文件没有显示任何错误,因此,当我尝试将我的命令按钮从表中写入时,它工作完美,如果我无法将其写入子表中好的,但是,我怎么能把它写在表里呢?它也没有出现在那里。

最佳答案

不客气:) 但如果我是你,我不会使用子表,我会考虑另一种解决方案。也许我会这样做,我会使用两个不同的数据表,第一个包含父列表,第二个包含子列表元素,并且所做的每个选择都会触发第二个表的更新...我在 IDE 上尝试过,效果很好

<h:form id="form">
<p:dataTable var="cas" value="#{beanCase.myListOfCase}"
    selection="#{beanCase.selectedCase}" rowKey="#{cas.idCase}"
    selectionMode="single">
    <p:ajax event="rowSelect" update=":form:TicketTable" />
    <p:column headerText="Id Case">
        <h:outputText value="#{cas.idCase}" />
    </p:column>
    <p:column headerText="Case Name ">
        <h:outputText value="#{cas.caseName}" />
    </p:column>
    <p:column headerText="Case Detail">
        <h:outputText value="#{cas.caseDetail}" />
    </p:column>
    <p:column headerText="Action">
        <p:commandButton value="Accept Case" update=":form:TicketTable"></p:commandButton>
    </p:column>
</p:dataTable>
<p:dataTable id="TicketTable" var="ticket"
    value="#{beanCase.selectedCase.tickets}">
    <p:column headerText="Ticket Number">
        <h:outputText value="#{ticket.idTicket}" />
    </p:column>
    <p:column headerText="Ticket Details">
        <h:outputText value="#{ticket.labelTicket}" />
    </p:column>
    <p:column headerText="show">
        <h:outputText value="#{ticket.show}" />
    </p:column>
    <p:column headerText="this show is brought to you by">
        <h:outputText value="#{ticket.sponsor}" />
    </p:column>
    <p:column headerText="Make a Reservation">
        <p:commandButton value="Buy" action="#{beanCase.buyTicket()}">
            <f:setPropertyActionListener value="#{ticket}"
                target="#{beanCase.selectedTicket}" />
        </p:commandButton>
    </p:column>
</p:dataTable>

在此之前,您必须为案例和工单创建数据模型类

public class CaseDataModel extends ListDataModel<Case> implements
    SelectableDataModel<Case> {
CaseDAO caseDAO = new CaseDAO();

public CaseDataModel() {
}

public CaseDataModel(List<Case> cases) {
    super(cases);
}

@Override
public Case getRowData(String arg0) {
    List<Case> listOfMyObjet = (List<Case>) caseDAO.findAll();
    for (Case obj : listOfMyObjet) {
        if (String.valueOf(obj.getIdCase()).equals(arg0))
            ;
        return obj;
    }
    return null;
}

@Override
public String getRowKey(Case arg0) {
    return String.valueOf(arg0.getIdCase());
}

}

关于java - 如何从 Primefaces 的子表中调用方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12994045/

相关文章:

java - 使用jdbc中的execute方法更新数据

java - 更新用户界面 :repeat partially JSF Primefaces

jsf - HTTP 状态 403 - 访问请求的资源已被拒绝(CSS 被阻止?)

java - 来自支持 bean 的非空数据列表在 jsf 形式中为空

dynamic - Primefaces TabView 不维护 selectOneMenu 值

java - 为什么我们不能在java中的printf中使用整数精度?只是好奇

java - 在 Jackson 序列化中从数组中删除空 JSON 对象

java - 从不同包中的类加载包内的 Java 图像

java - 打开起始页后未创建 SessionScoped bean

jsf - 如何使meta标签成为<head>部分中的第一个标签?