在wicket

时间:2017-06-05 09:29:15

标签: java wicket-6

我想创建一个表,带有一列链接,每个链接将打开它所代表的相应对象的页面。 例如,该列将显示发票编号,这是一个链接。当我们点击其中一个链接时,会打开一个页面,显示该发票的详细信息。 我试着这样做: 我创建了一个班级GuidLinkPanel.java,我正在放置ajaxLink

import org.apache.wicket.AttributeModifier;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.AjaxLink;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.request.mapper.parameter.PageParameters;

import nl.riskco.liberobc.client.business.model.InvoiceDomain;
import nl.riskco.liberobc.web.pages.details.DetailsPage;

public class GuidLinkPanel extends Panel {

    public GuidLinkPanel(final String id, IModel<InvoiceDomain> invoice)
    {
        super(id);

        add(new AjaxLink<Void>("guid"){

            private static final long serialVersionUID = 1L;

        @Override
        public void onClick(AjaxRequestTarget target) {
            PageParameters params = new PageParameters();
            params.add("invoiceId", invoice.getObject().getInvoiceGUID());
            setResponsePage(DetailsPage.class, params);
            }
        }); 
    }       
}

其标记

<wicket:panel>
    <wicket:message key="invoice-header">[invoice-header]</wicket:message>
    <a href="#" wicket:id="guid"></a>
</wicket:panel>

现在是创建表的类的摘录,我也希望这个列可以排序,所以我这样做:

columns.add(new PropertyColumn<InvoiceDomain, String>(new 
StringResourceModel("invoice-id-label", this, null), "invoiceGUID", 
"invoiceGUID"));

columns.add(new AbstractColumn<InvoiceDomain,String>(new Model<>("Invoice ID"),"invoiceGUID"){
        private static final long serialVersionUID = 1L;

        @Override
        public void populateItem(Item<ICellPopulator<InvoiceDomain>> item, String componentId, IModel<InvoiceDomain> rowmodel)
            {
                item.add(new GuidLinkPanel(componentId, rowmodel));
            }
        });

标记

<wicket:panel>
  <div class="panel panel-default">
     <div class="panel-body">
        <div class="table">
         <table wicket:id="invoices-table" class="table table-striped"
</table>
        </div>
     </div>
 </div>
</wicket:panel>

结果:

添加了列,但每行都添加了字符串

[GuidLinkPanel [Component id = cell]]]

并且它不是链接。 有没有人有建议怎么做?

1 个答案:

答案 0 :(得分:0)

您的AjaxLink没有文本子元素,例如<a ...>Some Text to click</a>

你可以这样做:

  • ajaxLink.setBody(Model.of(invoice.getObject()。getInvoiceGUID()))
  • 或ajaxLink.add(new Label(“linkLabel”,invoice.getObject()。getInvoiceGUID())。但是,您还必须添加一个HTML元素:<a wicket:id="guid><wicket:container wicket:id="linkLabel"/></a>