通过表行启动方法

时间:2014-01-27 22:08:03

标签: ajax jsf datatable row facelets

我是法国人,我会尽我所能与你一起开玩笑。 我有一个有书籍和信息书的数据表。 我希望我的表格创建一个按钮,用于将我的书添加到我的订单中(订购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 whith方法“addOrder(){}”),确保直接在我的对象“Order myOrder”中添加该行。谢谢!

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

功能“AddOrder”无法启动,但我的方法“init()”是。

我想检索我的行的“order”对象,我不知道这是怎么回事。

它应该包含一些用于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 {
    .......
}

谢谢