Ajax 如何刷新通过a<;用户界面:参数>;在SelectOne菜单上更改?

Ajax 如何刷新通过a<;用户界面:参数>;在SelectOne菜单上更改?,ajax,jsf,selectonemenu,uiinclude,Ajax,Jsf,Selectonemenu,Uiinclude,我正在使用Mojarra 2.2.11 从一个leftMenu部分(在一个xhtml中)和一个内容部分开始,其中页面上包含另一个xhtml{pageBean.page}:我想更新内容部分,其中显示选项卡列表,而不是leftMenu部分的selectOneMenu中选择的产品 在我的帮助下,我使用了ui:param(不确定是否合适) 在根据产品刷新内容部分中的选项卡之前,如何使用ui:param传递存储在sessionProduct(String)参数中的新选择的产品 (选项卡列表可能因产品而异)

我正在使用Mojarra 2.2.11

从一个leftMenu部分(在一个xhtml中)和一个内容部分开始,其中页面上包含另一个xhtml
{pageBean.page}
:我想更新内容部分,其中显示选项卡列表,而不是leftMenu部分的selectOneMenu中选择的产品

在我的帮助下,我使用了
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>

豆子:

@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

} 
@ManagedBean
@视域
公共类Bean实现了可序列化{
@EJB
私人公共服务公共服务;
私有列表选项卡;
私人上市产品;
私人产品;
ExternalContext ExternalContext=FacesContext.getCurrentInstance().getExternalContext();
Map sessionMap=externalContext.getSessionMap();
@施工后
public void init(ValueChangeEvent事件){
String newValue=(String)event.getNewValue();
sessionMap.remove(“sessionProduct”);
put(“sessionProduct”,(String)event.getNewValue());
this.product=publicService.getSpecificProduct((字符串)event.getNewValue());//返回产品对象
this.tabs=publicService.getAllTabs();//返回要在pageBean.page中显示的列表
} 

谢谢您的时间。

您只是想实现产品选择->产品详细信息视图导航吗?您真的需要
{pageBean.page}
要动态,为什么不只是一个具体的视图呢?
ui:param
仅用于xhtml视图的一种变量,而不是可以作为参数传递的东西。应该用IMO替换
selectOneMenu
中的
f:param
,因此可以在url中传递产品id并显示产品详细信息。请查看如何传递参数,并查看给定链接的模板部分。@XtremeBiker:我在SelectOne菜单下有几个
h:commandlink
s设置页面到pageBean:,我应该保留它。在链接中:是“源页面”块模板部分?selectOneMenu中的
f:param
很有意义。IMO的意思是什么?我的意思是你也可以从选择菜单中执行导航,作为GET请求,而不是POST请求。我个人不喜欢使用ajax进行导航的方法(所以JSF 1.x-ish),我更喜欢使用重定向,这样可以更改浏览器url,用户可以管理自己的书签。此外,视图是以这种方式松散耦合的,而如果使用ajax,一切都可能陷入混乱(因为视图bean对所有视图都是一样的)。如果我是你,并且从头开始构建这个应用程序,我会为此烦恼。@XtremeBiker:谢谢。我应该摆脱
ui:include
?在这种情况下,你的从头开始是什么?你只是想实现一个产品选择->产品详细信息视图导航吗?你真的需要
#{pageBean.page}
要动态,为什么不只是一个具体的视图呢?
ui:param
仅用于xhtml视图的一种变量,而不是可以作为参数传递的东西。应该用IMO替换
selectOneMenu
中的
f:param
,因此可以在url中传递产品id并显示产品详细信息。请查看如何传递参数,并查看给定链接的模板部分。@XtremeBiker:我在SelectOne菜单下有几个
h:commandlink
s设置页面到pageBean:,我应该保留它。在链接中:是“源页面”块模板部分?selectOneMenu中的
f:param
很有意义。IMO的意思是什么?我的意思是你也可以从选择菜单中执行导航,作为GET请求,而不是POST请求。我个人不喜欢使用ajax进行导航的方法(所以JSF 1.x-ish),我更喜欢使用重定向,这样可以更改浏览器url,用户可以管理自己的书签。此外,视图是以这种方式松散耦合的,而如果使用ajax,一切都可能陷入混乱(因为视图bean对所有视图都是一样的)。如果我是你,从头开始构建这个应用程序,我会为此烦恼。@XtremeBiker:谢谢。我应该摆脱
ui:include
?在这种情况下,你的从头开始是什么?