2010-01-15 3 views
3

У меня есть h: datatable, который отображает данные сотрудников. Я не хочу, чтобы пользователь, когда щелкните имя сотрудника, чтобы перейти на новую страницу, которая выглядит как URLПроблема с закладок JSF

employees?id=<some id> 

Я попытался объединить JSP EL с JSF EL, но не выход.

ответ

2

Если вы не на JSF 2.0 еще, то вы можете просто использовать h:outputLink в сочетании с <f:param>, #{param} и faces-config.xml.

Базовый пример таблицы:

<h:dataTable value="#{bean.employees}" var="employee"> 
    <h:column> 
     <h:outputLink value="employees.jsf"> 
      <f:param name="id" value="#{employee.id}" /> 
      <h:outputText value="View employee #{employee.name}" /> 
     </h:outputLink> 
    </h:column> 
</h:dataTable> 

Основные faces-config.xml пример:

<managed-bean> 
    <managed-bean-name>employeeManager</managed-bean-name> 
    <managed-bean-class>com.example.EmployeeManager</managed-bean-class> 
    <managed-bean-scope>request</managed-bean-scope> 
    <managed-property> 
     <property-name>id</property-name> 
     <value>#{param.id}</value> 
    </managed-property> 
</managed-bean> 

Основные com.example.EmployeeManager пример:

public class EmployeeManager { 
    private Long id; 
    private Employee employee; 

    @PostConstruct 
    public void init() { 
     this.employee = employeeDAO.find(this.id); 
    } 
} 

The @PostConstuct аннотированных методов будет вызываться после того, как фасонная конструкция и все условия впрыска и управляемой собственности. Также см. this article для получения дополнительной информации и примеров.

+0

Ваш блог отлично выглядит, спасибо :) Да, вы правы в подсказке @PostConstruct, я обновил эту заметку (и перечислил ее в своем блоге http://m-hewedy.blogspot.com/2010/01/ call-session-beans-on-jsf-managed.html) Но один вопрос здесь. Что, если мне нужно поместить объект employee в область сеанса с помощью h: outputlink? –

+0

Просто сделайте 'EmployeeManager' сессионным компонентом. – BalusC

2

Есть два возможных решения я могу думать:

  1. Использование JSF 2 (часть Java EE 6)
  2. Если вы застряли в JSF 1.x, используйте PrettyFaces.

Если это возможно, чтобы перейти к серверу Java EE 6, я настоятельно рекомендую номер опции 1.

Edit: Есть 2 метки, которые были добавлены в JSF 2: <h:link /> и <h:button />. Они используют GET вместо POST. Также обратите внимание на <f:viewparam />. Кроме того, есть много другие замечательные дополнения в JSF 2. Краткий обзор см. this article.

+0

Итак, пользуется JSF2, решит эту проблему, так как я боюсь, что после переключения на неподвижное лицо проблема? –

+0

Для этого вам не обязательно нужен JSF2. Это не имеет никакого смысла. – BalusC

+0

Вам не нужно * JSF 2 для этого. Вы можете изменить обработчик вида, чтобы принять параметры запроса приема. Однако это хакерский способ сделать это. Вы также можете использовать выходную ссылку. Однако это обходит навигацию JSF. –

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