为什么只调用最后一个<f:param>动作?

时间:2015-12-29 00:55:52

标签: jsf commandlink

我在JSF页面中有一个commandLinks列表,其中每个commandLink都设置到content.xhtml页面中的相应页面。

问题:在下面的commandLink列表中,只有最后一个成功运行:

<ui:composition>
    <h:form>
      <ul class="nav nav-sidebar">
        <li>
            <h:commandLink value="Title1"  >
                <f:param  value="#{pageBean.setPage('title1')}" />
            </h:commandLink>
        </li>
        <li>
            <h:commandLink value="Title2"   >
                <f:param value="#{pageBean.setPage('title2')}" />
            </h:commandLink>
        </li>
        <li>
            <h:commandLink value="Title3"  >
                <f:param  value="#{pageBean.setPage('title3')}" />
            </h:commandLink>
        </li>           
     </ul>     
  </h:form>

How can I pass selected row to commandLink inside dataTable?项目编号2,我知道需要访问请求参数映射。在这种情况下<f:param>这是正确的吗?如何使用正确的标题页设置下面的一个页面?

content.xhtml

<ui:composition>
    <div class="container-fluid">
        <div class="row">

            <div id="target" class="col-sm-9 col-sm-offset-3 col-md-10 col-md-offset-2 main">                    
              <ui:insert name="content" >  
                <ui:include src="/WEB-INF/includes/#{pageBean.page}.xhtml" /> 
              </ui:insert>          
            </div>
        </div>
    </div>
</ui:composition>

PageBean

@ManagedBean
@ViewScoped
public class PageBean implements Serializable {

    private String page;

    @PostConstruct
    public void init() {
        page = "title1"; //  Default include.
    }

//getter & setter
}

与问题相关:当PageBean是在title1内的RequestScoped事件正常工作但commandLinks失败时。当PageBean是title1中的ViewScoped事件时不起作用,我只有最后一个commandLink工作。

我做错了什么?感谢。

编辑(根据下面提到的教程):

        <li>
            <h:commandLink value="Title1" action="#{pageBean.setPage}" >
                <f:param  name="action" value="title1" />
            </h:commandLink>
        </li>

以下方法不称为

public void setPage() {

    Map<String, String> params = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();

    String page = params.get("action");

    System.out.println("page " + page);

    this.page = page;
}

0 个答案:

没有答案