如何刷新在selectOneMenu更改时传递<ui:param>的包含页面?

时间:2015-12-26 18:10:01

标签: ajax jsf selectonemenu uiinclude

我正在使用Mojarra 2.2.11

How to ajax-refresh dynamic include content by navigation menu?开始,一个leftMenu部分(在一个xhtml中)和一个内容部分,其中另一个xhtml #{pageBean.page}包含在页面上:我想更新选项卡列表所在的内容部分显示与leftMenu部分的selectOneMenu中选择的产品。

How to include another XHTML in XHTML using JSF 2.0 Facelets?的帮助下,我使用了ui:param(不确定是否合适)。

在根据产品刷新内容部分中的标签之前,如何使用ui:param传递存储在sessionProduct(String)参数中的新选择的产品?

(标签列表可能因产品而异)

content.xhtml:

<ui:composition>
    <h:outputScript name="js/fixviewstate.js"  />
        <div class="container-fluid">
            <div class="row">
                <div class="col-sm-3 col-md-2 sidebar">    
                    <ui:include src="leftMenu.xhtml" /> 
                </div>

                <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:param name="??" value="#{bean.product}" />

                  </ui:include>  

                </div>
            </div>
        </div>

</ui:composition>

leftMenu.xhtml:

<ui:composition>
    <h:form>
            <p:outputPanel style="float:center;margin-left: 33px"> 

            <h:selectOneMenu    value="#{bean.product}" onchange="submit();"
                        valueChangeListener="#{bean.init}">

               <f:selectItems value="#{bean.products}" />

            </h:selectOneMenu>

          </p:outputPanel>
    <h:form>
</ui:composition>

bean:

@ManagedBean
@ViewScoped
public class Bean implements Serializable{

@EJB
private PublicService publicService;

private List<Tab> tabs;

private List<Product> products;
private Product product;

ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
Map<String, Object> sessionMap = externalContext.getSessionMap(); 

@PostConstruct  
public void init(ValueChangeEvent event)  {

    String newValue = (String) event.getNewValue();

    sessionMap.remove("sessionProduct");

    sessionMap.put("sessionProduct", (String) event.getNewValue());  

    this.product = publicService.getSpecificProduct((String) event.getNewValue()); // returns Product Object
    this.tabs = publicService.getAllTabs();  // returns List<Tab> to be displayed in pageBean.page

} 

感谢您的时间。

0 个答案:

没有答案