2017-02-14 5 views
0

Я хочу знать, если есть способ, чтобы открыть новую вкладку в этой ситуации:Новая вкладка в JSF

У меня есть таблица в страницу с клиентами (searchCustomer.jsf)

На каждом row У меня есть ссылка для редактирования этого конкретного клиента.

Код для ссылки команды это один:

<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>

в управляемом компоненте у меня есть функция 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"; 
 
    }

Я настроил страницы в моих гранях-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);

, но если я пытаюсь открыть ссылку в новой вкладке (Rigth нажмите -> Открыть в новой вкладке) (страница вернуться к моей searchCustomer.jsf)

Есть ли способ сделать это в последний раз опция (открыть на новой вкладке) работает так же, как и первый вариант (щелкните ссылку)?

пожалуйста, дайте мне знать, если вам нужна дополнительная информация

ответ

0

No. По крайней мере, не без рефакторинга кода.

При выборе new tab из контекстного меню браузеров, все браузер делает:

  • Скопируйте целевой URL
  • Открыть его в новой вкладке.

и поскольку (html-технически) ваша ссылка будет указывать на /pages/searchCustomer.jsf - вы снова попадете на первую страницу.

Единственный способ справиться с этим - разработка глубоких ссылок для вашего приложения. т. е. ваша кнопка «управлять» должна ссылаться на URL /pages/manageCustomer.jsf?customer_id=5988, где вы используете <f:viewParam name="customer_id" value="#{bean.selectedCustomerId} />, чтобы поместить параметр url customer_id обратно в свойство bean-компонента для дальнейшей обработки.

Но использование этого приведет к удалению частичных ответов на jsf-webapps, так как в результате получится модель запроса/ответа, чтобы получить GET-параметры.

Если используется для внутренних целей, научить людей, что веб-приложение не является веб-сайт, так что различные правила :-)

Я имею в виду: Вы также не можете просто открыть «представить -button "любой POST-формы (vanilla-html) в новой вкладке. Это также не сработает.Все получили это, так что это просто вопрос привычки. Измените свои ссылки на «Кнопки», и никто не ожидал, что сможет открыть его на новой вкладке.

Смежные вопросы