【问题标题】:Start a method through a table row通过表格行启动方法
【发布时间】:2014-02-18 23:47:50
【问题描述】:

我是法国人,我会尽力和你说英语。 我有一个包含书籍和信息书籍的数据表。 我希望我的表创建一个按钮,用于将我的书添加到我的订单 (Order myOrder),但我不能,尽管我尝试这样做。

我的小脸:

    <div class="divListLivres">
            <h1>Liste des livres</h1>

            <h:dataTable styleClass="order-table"
                headerClass="order-table-header"
                rowClasses="order-table-odd-row,order-table-even-row" var="_book"
                value="#{catalogueIBean.books}">

                <h:column>
                    <f:facet name="header">Titre</f:facet>
                    <h:outputLabel value="#{_book.title}" />

                </h:column>
                <h:column>
                    <f:facet name="header">Editeur</f:facet>
                    <h:outputLabel value="#{_book.editor}" />

                </h:column>
                <h:column>
                    <f:facet name="header">Auteur</f:facet>
                    <h:outputLabel value="#{_book.author.firstName}" />
                    <h:outputLabel value=" #{_book.author.lastName}" />

                </h:column>

                <h:column>
                    <f:facet name="header">Prix unitaire</f:facet>
                    <h:outputLabel value=" #{_book.unitPrice}" />
                    <h:outputLabel value="€" />
                </h:column>

            </h:dataTable>
        </div>

你能帮帮我吗?通过将操作重定向到我的 bean 的方法(CatalogueIBean 带有方法“addOrder(){}”),确保直接在我的对象“Order myOrder”中添加该行。谢谢!

【问题讨论】:

    标签: ajax jsf datatable row facelets


    【解决方案1】:

    您可以轻松地将另一列命令按钮添加到数据表中,这样您在每一行中都会有一个按钮,可以将您重定向到所需的方法

     <p:column style="width:6%" headerText="Add to Order">
     <p:commandButton id="addOrderButton"     
      action="#{catalogueIBean.addOrder}" immediate="true" ajax="true"
      icon="ui-icon-folder-open">
        <f:param name="id" value="#{_book.id}" />               
        </p:commandButton>
        </p:column>
    

    注意:您可以根据需要更改图标,如果您不想要图标,则可以将其删除,而是可以通过按钮的 value 属性命名按钮。此外,如果您不希望您的按钮出现在数据表中,您可以在数据表的表单之外创建一个新表单并在那里添加您的按钮。

    你的支持bean应该是

        FacesContext context = FacesContext.getCurrentInstance();
        Map requestMap = context.getExternalContext().getRequestParameterMap();
        String value = (String) requestMap.get("id");
        Integer id = Integer.parseInt(value);
    

    现在您有了每一行的 id,您可以遍历到所需的对象

    【讨论】:

    • 如果您想检索您在数据表中选择的行的顺序,那么我已经更新了代码。您需要做的是为数据表中的每一行提供一个 id,使用 发送 id 并以您的方法接收它后备豆
    【解决方案2】:

    函数“AddOrder”没有启动,但我的方法“init ()”是的。

    我想检索我的行的“订单”对象,我看不出这怎么可能。

    它应该为 ajax 工作加入一些东西吗?

    这是我的bean的开始:

    @ManagedBean(name = "catalogueIBean")
    @RequestScoped
    public class CatalogueIBean {
    
        @Inject
        private FacesContext facesContext;
    
        @Inject
        private BookService bookService;
    
        // ////////////////Variables de facelet//////////////////
    
        private String title;
        private String isbn13;
        private Double price;
        private int selectAuthor;
        private List<Author> authors;
        private String selectEditor;
        private List<SelectItem> editorNames;
        private List<Book> books;
        private Book selectedBook;
    
        // ////////////////Méthodes de facelet//////////////////
    
        public String addOrder(/*parameter ??*/) throws Exception {
            //add order of the line of datatable in my order (or create an orderLine)
            return null;
        }
    
    // ////////////////Initialisation//////////////////
    
    @PostConstruct
    public void init() throws Exception {
        .......
    }
    

    谢谢

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-12
      • 1970-01-01
      • 1970-01-01
      • 2014-07-27
      • 1970-01-01
      • 2021-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多