Netbeans Visual Web Pack のドキュメントに、ハイパーリンクオブジェクトの配列を使用してパンくずリストのリンクを追加できるという記述があります。ハイパーリンクの配列の作成とパンくずリストへの割り当てはできましたが、ハイパーリンクのアクションを設定しようとすると問題が発生します。
J2EE 1.4 に基づくアプリケーションでは、アクションハンドラが呼び出されないようにパンくずリストの setPages を呼び出しても、同じ問題が見られました。 この問題を回避するには、パンくずリストの子としてハイパーリンクを追加するために、setPages 呼び出しを folderCrumbs.getChildren().add(hyperTmp) に置き換える必要があります。これにより、起動させるためのアクションハンドラが作成されます。
Hyperlink[] crumbsTest = new Hyperlink[5];
for (int i = 0; i < 5; i++) {
Hyperlink hyperTmp = new Hyperlink();
hyperTmp.setText("リンク " + i);
hyperTmp.setToolTip("リンク " + i + " のツールチップ");
// メソッドバインドを作成
MethodBinding mb = (MethodBinding) this.getApplication().createMethodBinding("#{Page1.breadcrumbLinkTest_action}", null);
hyperTmp.setAction(mb);
crumbsTest[i] = hyperTmp;
folderCrumbs.getChildren().add(hyperTmp);
}
アプリケーションが Java EE 5 に基づく場合は、setPages を使用します。メソッドバインドを定義する方法が異なることに注目してください。
Hyperlink[] crumbsTest = new Hyperlink[5];
for (int i = 0; i < 5; i++) {
Hyperlink hyperTmp = new Hyperlink();
hyperTmp.setText("リンク " + i);
hyperTmp.setToolTip("リンク " + i + " のツールチップ");
// メソッド式を作成
MethodExpression me = (MethodExpression)this.getApplication().getExpressionFactory().createMethodExpression(
getFacesContext().getELContext(), "#{Page1.breadcrumbLinkTest_action}", String.class,new Class[] {});
hyperTmp.setActionExpression(me);
crumbsTest[i] = hyperTmp;
}
breadcrumbs1.setPages(crumbsTest);