【发布时间】:2014-07-25 01:44:50
【问题描述】:
我正在使用 primefaces5.0 做 jsf,这是我的场景:
我有一个页面包含一个带有上下文菜单的数据表,如下所示: 当我单击上下文菜单时,我想弹出另一个“窗口”(不是“选项卡”),其中包含有关所选数据的信息,例如字符串“data1”。
但是,无论我在p:menuitem 中使用action 还是url 参数,都无法做到这一点。
当我使用action 参数时,anotherPage 显示但在原始窗口中,而打开的新窗口为空:
如果我将action="/anotherPage" 更改为url="/anotherPage.xhtml",anotherPage 会在新窗口中显示,但没有有关所选数据的信息:(请注意,标题已更改为“另一页”)
@ 987654325@
这是我所做的:
小脸:
<h:form>
<p:contextMenu for="dataTable">
<p:menuitem value="clickMe" icon="ui-icon-gear"
onclick="window.open('', 'Popup', config = 'scrollbars=yes,status=no,toolbar=no,location=no,menubar=no,width=1300,height=370').focus();"
target="Popup" actionListener="#{mainBean.showPopup()}" action="/anotherPage"/>
</p:contextMenu>
<p:dataTable id="dataTable" value="#{mainBean.dataList}" var="data" rowIndexVar="index" emptyMessage="Loading..."
selectionMode="single" selection="#{mainBean.selectedStr}" rowKey="#{data}">
<p:column headerText="data">
<p:outputLabel value="#{data}"/>
</p:column>
</p:dataTable>
</h:form>
BackingBean:
private List<String> dataList=new ArrayList<>();
private String selectedStr="";
public void showPopup(){
Map<String, Object> reqMap=FacesContext.getCurrentInstance().getExternalContext().getRequestMap();
reqMap.put("param", selectedStr);
}
另一个页面.xhtml:
<p:outputLabel value="This is the selected String:"/>
<p:outputLabel value="#{anotherPageBean.txt}"/>
另一个PageBean:
private String txt;
@PostConstruct
public void init(){
Map<String, Object> reqMap=FacesContext.getCurrentInstance().getExternalContext().getRequestMap();
txt=(String) reqMap.get("param");
}
非常感谢。
更新
我做了很多调查并发现了一些东西:
-
action的 menuitem 的Target属性不会呈现,它是known issue,不会被修复。 - Menuitem支持
f:params根据optimus.prime传递参数。 - 当我使用
url时,在request map中找不到参数,这可能意味着这是一个全新的请求,所以我在reqMap中找不到。 - 也许我可以将参数放在会话映射中而不是请求映射中,因为我在 3 中提到过。
- 如果我使用
url,则不会调用action和actionListener。
【问题讨论】:
-
您是否尝试过在您的
menuItem上使用target="_blank"? -
我试过了,页面仍然显示在原来的窗口中......
标签: jsf primefaces datatable contextmenu target