JSFの基本的な質問があります。リストの値に応じて、複数のコマンドリンクを作成しようとしているループがあります。そのコマンドリンクは、提出されたリストから対応するアクションを呼び出します。
基本的に私はこの豆を持っています:
public class FavoriteTasks implements Serializable {
private static final long serialVersionUID = -8702569738872927728L;
private String key;
private String action;
private String widget;
private String name;
public FavoriteTasks(String key, String action, String widget, String name) {
super();
this.key = key;
this.action = action;
this.widget = widget;
}
次に、プロパティファイルを使用してデータを入力します。
private void setUpFavTasks(UserUIPreferencesVO uiPref) {
List<String> fTaskList = uiPref.getFavoriteTasks();
favTasks =new ArrayList<FavoriteTasks>();
for(String var:fTaskList){
FavoriteTasks ft = new FavoriteTasks(var,
ConfigurationData.getValue(var+".action"),
ConfigurationData.getValue(var+".widget"),
ConfigurationData.getValue(var+".name"));
favTasks.add(ft);
}
}
ここで問題となるのは、アクションが最初に値を取得してそれを読み取り、値に応じてメソッド呼び出しを行う必要があることを理解していないことです。
<ui:repeat value="#{userSessionBean.favTasks}" var="favTasks" >
<li><ice:commandLink styleClass="shortcut-menu" action="#{favTasks.action}">
<f:param name="filterByContentWidget" value="#{favTasks.widget}" />
<f:param name="filterByContentGroup" value="#{favTasks.key}" />
<f:param name="menuName" value="#{favTasks.name}" />
<h:outputText value="#{msgs[favTasks.key]}" />
</ice:commandLink>
</li>
</ui:repeat>
アクションはfavTasks.actionを取得しようとしていますが、そのようなメソッドがないため失敗します。favTasks.actionに格納されている値を読み取ってから、その値が言っているメソッドに移動する必要があります...たとえば、favTasks.action=catalogHandler.showCatalogの場合。favTasks.actionではなくcatalogHandler.showCatalogを呼び出す必要があります