【问题标题】:New tab in a jsfjsf中的新标签
【发布时间】:2017-02-14 20:55:36
【问题描述】:

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

我在包含客户的页面中有一个表格 (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>

在托管 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";
    }

我已经在 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>

如果我只是单击链接,该功能会执行我想要的操作。 (页面转到manageCustomer.jsf);

但如果我尝试在新选项卡中打开链接(右击 -> 在新选项卡中打开)(页面返回到我的 searchCustomer.jsf)

有没有办法让最后一个选项(在新选项卡中打开)与第一个选项(点击链接)一样工作?

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

【问题讨论】:

    标签: java jsf jsf-2


    【解决方案1】:

    没有。至少在不重构代码的情况下是这样。

    当您从浏览器上下文菜单中选择new tab 时,浏览器所做的只是:

    • 复制目标网址
    • 在新选项卡中打开它。

    因为(从技术上讲)您的链接将指向/pages/searchCustomer.jsf - 您将再次出现在第一页。

    解决此问题的唯一方法是为您的应用程序设计深层链接。即您的“管理”按钮应引用 URL /pages/manageCustomer.jsf?customer_id=5988,您使用 &lt;f:viewParam name="customer_id" value="#{bean.selectedCustomerId} /&gt; 将 url 参数 customer_id 放回 bean-property 以进行进一步处理。

    但是使用它会破坏在 jsf-webapps 上使用部分响应的意义,因为它最终会使用请求/响应模型来获取 GET 参数。

    如果用于内部目的,请教导您的员工,网络应用不是网站,因此适用不同的规则 :-)

    我的意思是:您也不能只在新标签中打开任何 POST-Form (vanilla-html) 的“提交按钮”。它也行不通。每个人都有这个,所以这只是一个习惯问题。将您的链接更改为“按钮”,没有人会期望能够在新标签中打开它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-29
      • 1970-01-01
      • 2014-03-21
      • 2015-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-10
      相关资源
      最近更新 更多