0

我有一个基本的 JSF 问题。我有一个循环,我试图根据列表值创建多个命令链接。并且该命令链接将从列表字段中调用相应的操作。

基本上我有这个bean:

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>

action 试图获取 favTasks.action 并失败,因为没有这样的方法。它需要读取存储在 favTasks.action 中的值,然后转到该值所说的方法……例如,如果 favTasks.action = catalogHandler.showCatalog。它需要调用 catalogHandler.showCatalog 而不是 favTasks.action

4

1 回答 1

0

当您单击 commandLink 时,action 属性用于指示下一个视图。它是一个返回字符串的方法表达式。

例如:

public String method() {
   //do something
   return "success";
}

在你的 commandLink 中作为

<ice:commandLink value="Submit" action="#{bean.method}" />

点击后会带你到success.xhtml

此外,您需要声明公共设置器/获取器,您无法获取/设置代码中的任何私有变量:

private String key;
private String widget;
private String name;
于 2012-08-30T00:23:22.897 回答