我想知道在这种情况下是否有办法打开新标签:
我在客户页面中有一个表(searchCustomer.jsf)
在每一行上,我都有一个命令链接来编辑这个特定的客户。
命令链接的代码是这个:
<p:column styleClass="buttonColumn" exportable="false" >
<p:commandLink title="#{msg.set}"
action="#{searchCustomerManageBean.setCustomer(customer)}"
disabled="#{ not searchCustomerManageBean.canEdit(customer)}"
value="#{msg.edit}"/>
</p:column>
&#13;
托管bean中的
我有setCustomer函数:
public String setCustomer(Customer customer) {
setcustomerSelected(customer);
final DataTable d1 = (DataTable) FacesContext.getCurrentInstance().getViewRoot().findComponent("form:basicDT");
int first1 = d1.getFirst();
actualPage = first1;
WebUtils.putObjectOnFlashContext("customerId", customer.getCustomerId());
WebUtils.putObjectOnFlashContext("Back page", "GO_TO_CUSTOMER_SEARCH");
WebUtils.putObjectOnFlashContext("read only", Boolean.FALSE);
return "GO_TO_CUSTOMER";
}
&#13;
我在faces-config.xml
中设置了页面
faces-config.xml
<navigation-case>
<from-outcome>GO_TO_CUSTOMER_SEARCH</from-outcome>
<to-view-id>/pages/searchCustomer.jsf</to-view-id>
<redirect/>
</navigation-case>
<navigation-case>
<from-outcome>GO_TO_CUSTOMER</from-outcome>
<to-view-id>/pages/manageCustomer.jsf</to-view-id>
<redirect/>
</navigation-case>
&#13;
如果我只是点击链接,该功能可以满足我的需求。 (该页面转到manageCustomer.jsf);
但是如果我尝试在新标签页中打开链接(在新标签页中点击 - &gt;打开)(该页面会返回到我的searchCustomer.jsf)
有没有办法让最后一个选项(在新标签页中打开)与第一个选项(点击链接)相同?
如果您需要更多信息,请告诉我
答案 0 :(得分:0)
没有。至少在没有重构代码的情况下。
当您从浏览器上下文菜单中选择new tab
时,所有浏览器都会:
从(html-技术上)您的链接指向/pages/searchCustomer.jsf
- 您将再次在第一页上结束。
处理此问题的唯一方法是为您的应用程序设计深层链接。即你的&#34;管理&#34;按钮应引用URL /pages/manageCustomer.jsf?customer_id=5988
,您可以使用<f:viewParam name="customer_id" value="#{bean.selectedCustomerId} />
将url-parameter customer_id
放回bean属性中以进行进一步处理。
但是使用它会破坏在jsf-webapps上使用部分响应的重点,因为它最终会得到一个请求/响应模型,以便获取GET参数。
如果用于内部目的,请教您的员工,网络应用程序不是网站,因此适用不同的规则:-)
我的意思是:你也不能只打开一个&#34;提交按钮&#34;在新标签中的任何POST表单(vanilla-html)。它也不会起作用。每个人都有这个,所以这只是一个习惯问题。将您的链接更改为&#34;按钮&#34;并且没有人会期望能够在新标签中打开它。