1つのデータテーブルのみからなるページを生成したい。このデータテーブルでは、ユーザーがクリックしたときに何かをするリンクが1つの列に含まれている必要があります。 これは、LinkPropertyColumnのさまざまな実装を使用して単純なタスクと思われます。私は、少し異なる実装をたくさんテストした後、hereの実装を使用することに決めました。すべての実装で同じ結果が得られました。テーブルは完全に正しいテキストで生成されましたが、列内に生成されたリンクはクリックできませんでした。それらをクリックすると何も起こりません。マウスの上には、通常のリンクとして青色で表示されていますが、下線は付けられていません。私が発見したテキストを追加すると、AjaxLinkのonClickメソッドは呼び出されません。誰かが私にヒントを与えることができたら本当に感謝します。Wicket 6:LinkPropertyColumnを使用してDataTableでリンクをクリックできない
ここに私のページクラスです:
@AuthorizeInstantiation("CHART_CONFIG_READ")
public class PrChartListPage extends PrBasePage {
private static final long serialVersionUID = 1L;
public static final Logger LOG = LoggerFactory.getLogger(PrChartListPage.class);
@SpringBean
private IPrChartDSP chartDSPRealizer;
@SuppressWarnings("rawtypes")
private SingleSortState sortState = new SingleSortState();
private PrDataTable<PrChartVO, String> mChartDataTable;
private PrProjectVO project;
/**
* Constructor
*/
public PrChartListPage(PageParameters params) {
super(params);
project=getActiveProject();
// Deal with the ChartDataTable form
Form<PrChartVO> lChartDataTableForm = new Form<PrChartVO>("chartDataTableForm");
// MetaDataRoleAuthorizationStrategy.authorize(lChartDataTableForm, RENDER, "USER");
add(lChartDataTableForm);
add(new Label("subTitle", new ResourceModel("chart.title", "Chart Configurator")));
// Create and add the Chart list table to the page.
addChartDataTable();
}
private void addChartDataTable() {
List<IColumn<PrChartVO, String>> lColumns = new ArrayList<IColumn<PrChartVO, String>>();
PrLinkPropertyColumn<PrChartVO> lChartNameColumn = new PrLinkPropertyColumn<PrChartVO>(
new ResourceModel("chart.headerName"), "chart_name", "chart_name"){
private static final long serialVersionUID = 1L;
@Override
public void onClick(Item<ICellPopulator<PrChartVO>> cellItem, String componentId,
IModel<PrChartVO> model, AjaxRequestTarget target) {
// TODO Auto-generated method stub
Object o = model.getObject();
if(o instanceof PrChartVO){
PrChartVO chart = (PrChartVO)o;
System.err.println("Chart: "+ chart.getChart_name()+" "+chart.getId());
}
else
System.err.println("Object is no chart!!! -> " + o.getClass().getName());
}
};
lColumns.add(lChartNameColumn);
PropertyColumn<PrChartVO, String> lChartTitleColumn = new PropertyColumn<PrChartVO, String>(new ResourceModel(
"chart.headerTitle"), "title_text", "title_text");
lColumns.add(lChartTitleColumn);
PropertyColumn<PrChartVO, String> lChartTypeColumn = new PropertyColumn<PrChartVO, String>(new ResourceModel(
"chart.headerChartType"), "chartTypeVO.type", "chartTypeVO.type");
lColumns.add(lChartTypeColumn);
PropertyColumn<PrChartVO, String> lXaxisTypeColumn = new PropertyColumn<PrChartVO, String>(
new ResourceModel("chart.xaxisType"), "xAxisVO.name", "xAxisVO.name");
lColumns.add(lXaxisTypeColumn);
mChartDataTable = new PrDataTable<PrChartVO, String>("chartDataTable", lColumns, new ChartDataProvider(), PrConstants.pageSize, "100%");
mChartDataTable.setOutputMarkupId(true);
// MetaDataRoleAuthorizationStrategy.authorize(mChartDataTable, RENDER, "USER");
add(mChartDataTable);
}
@Override
protected void onBeforeRender() {
super.onBeforeRender();
}
private final class ChartDataProvider implements ISortableDataProvider<PrChartVO, String> {
private static final long serialVersionUID = 1L;
@Override
public Iterator<? extends PrChartVO> iterator(long first, long count) {
if(project==null)
System.err.println("Chart Iterator: Project is null");
List<PrChartVO> lChartList = chartDSPRealizer.loadAllChartVOs(project);
for (PrChartVO lChartVO : lChartList) {
if (lChartVO.getxAxisVO() != null && lChartVO.getxAxisVO().getName() != null) {
String lXaxisName = new ResourceModel(lChartVO.getxAxisVO().getName()).getObject();
lChartVO.getxAxisVO().setName(lXaxisName);
}
}
return lChartList.subList((int)first, (int)(first + count)).iterator();
}
@Override
public long size() {
int lRet = 0;
if(project!=null)
lRet = chartDSPRealizer.getChartCount(project);
return lRet;
}
@Override
public IModel<PrChartVO> model(PrChartVO object) {
return new Model<PrChartVO>(object);
}
@Override
public void detach() {
// Ignore
}
@SuppressWarnings({ "unchecked", "rawtypes" })
@Override
public ISortState getSortState() {
return sortState;
}
}
}
これは私はちょうど私が(私たちは6.19を使用している)改札するのは比較的新しいだと言及したいと思います
public abstract class PrLinkPropertyColumn<T> extends FilteredPropertyColumn<T, String> {
public PrLinkPropertyColumn(IModel<String> displayModel, IModel<T> labelModel) {
super(displayModel, null);
}
public PrLinkPropertyColumn(final IModel<String> displayModel, final String sortProperty,
final String propertyExpression) {
super(displayModel, propertyExpression, sortProperty);
}
public PrLinkPropertyColumn(IModel<String> displayModel, String propertyExpressions) {
super(displayModel, propertyExpressions);
}
@Override
public void populateItem(Item<ICellPopulator<T>> cellItem, String componentId, IModel<T> rowModel) {
cellItem.add(new LinkPanel(cellItem, componentId, rowModel));
}
/**
* Override this method to react to link clicks. Your own/internal row id
* will most likely be inside the model.
*/
public abstract void onClick(Item<ICellPopulator<T>> cellItem, String componentId, IModel<T> model,
AjaxRequestTarget target);
public class LinkPanel extends Panel {
public LinkPanel(final Item<ICellPopulator<T>> cellItem, final String componentId, final IModel<T> model) {
super(componentId);
AjaxLink<T> link = new AjaxLink<T>("link") {
@Override
public void onClick(AjaxRequestTarget target) {
System.out.println("This method is never invoked");
PrLinkPropertyColumn.this.onClick(cellItem, componentId, model, target);
}
};
link.add(new Label("label", getDataModel(model)));
add(link);
}
}
/*
* (non-Javadoc)
*
* @see org.apache.wicket.extensions.markup.html.repeater.data.table.filter.
* IFilteredColumn#getFilter(java.lang.String,
* org.apache.wicket.extensions.markup
* .html.repeater.data.table.filter.FilterForm)
*/
@Override
public Component getFilter(String componentId, FilterForm<?> form) {
return new TextFilter<T>(componentId, getFilterModel(form), form);
}
protected IModel<T> getFilterModel(final FilterForm<?> form) {
return new PropertyModel<T>(form.getDefaultModel(), getPropertyExpression());
}
}
LinkPropertyColumnクラスであるとことを私は既存のプロジェクトを続行しなければなりません(そして、私はもう誰も質問しません)。したがって、私は知らないいくつかのCSSや何かがあるかもしれません。これが私が検索しなければならない設定の種類についてのヒントを私に与えることができれば、私が感謝する理由であれば。
最初に、ブラウザのネットワークモニタで、リンクをクリックしたときにリクエストが送信されるかどうかを確認します。 – svenmeier
その後、ListenerInterfaceRequestHandler#respond()にブレークポイントを設定し、このリクエストでWicketがやっていることをデバッグします。 – svenmeier
私は私の問題を解決することができました。残念ながら、ソリューションを提供することはできません。なぜなら、ゼロから始めたばかりで、現在は同じコードで終わったからです。マジック:-))ご協力いただきありがとうございます。 –