jsf中的新选项卡

时间:2017-02-14 20:55:37

标签: java jsf jsf-2

我想知道在这种情况下是否有办法打开新标签:

我在客户页面中有一个表(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;
&#13;
&#13;

托管bean中的

我有setCustomer函数:

&#13;
&#13;
 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;
&#13;
&#13;

我在faces-config.xml

中设置了页面

&#13;
&#13;
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;
&#13;
&#13;

如果我只是点击链接,该功能可以满足我的需求。 (该页面转到manageCustomer.jsf);

但是如果我尝试在新标签页中打开链接(在新标签页中点击 - &gt;打开)(该页面会返回到我的searchCustomer.jsf)

有没有办法让最后一个选项(在新标签页中打开)与第一个选项(点击链接)相同?

如果您需要更多信息,请告诉我

1 个答案:

答案 0 :(得分:0)

没有。至少在没有重构代码的情况下。

当您从浏览器上下文菜单中选择new tab时,所有浏览器都会:

  • 复制target-url
  • 在新标签页中将其打开。

从(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;并且没有人会期望能够在新标签中打开它。