2015-04-07 5 views
0

Я работаю с JSF 2.2 и Tomcat 8, и я только начинаю играть с ними.Передайте параметр с ManagedBean на страницу jsf

У меня есть кнопка команды на странице jsf.

<h:commandButton id="newObject" value="New Object" action="#{someObject.someAction}"> 
<f:param name="object_id" value="#{someObject.object_id}" /> 
</h:commandButton> 

ManagedBean похож на это:

import java.io.Serializable; 
import javax.faces.bean.ManagedBean; 
@ManagedBean 
public class SomeObject implements Serializable{ 
    private static final long serialVersionUID = 1L; 
    private int object_id; 
    public int getObject_id() { 
     return object_id; 
    } 
    public void setObject_id(int object_id) { 
     this.object_id = object_id; 
    } 
    public String someAction() { 
     setObject_id(sqlInsert()); 
     if(getObject_id() != 0) { 
      System.out.println(getObject_id()); 
      return "new_page"; 
     } 
    } 
} 

Метод SQLInsert работает нормально. Я использую его, чтобы вставить новую строку в какую-нибудь таблицу sql и получить автоматически сгенерированный ключ, который является int. Если вставка не была выполнена, она вернет 0.

Я могу перейти к новой_странице, но param object_id равен 0. Я добавил println, чтобы показать object_id, и это фактический ключ.

Что я делаю неправильно?

+0

Помимо того, что вы неправильно понимаете некоторые фундаментальные понятия об общении в JSF, почему вы передаете 'objectId' bean'а обратно? В какой момент кода вы показываете здесь, действительно ли вы устанавливаете значение 'objectId' в значение, отличное от 0? – kolossus

+0

На странице jsf я не устанавливаю objectId, потому что он еще не существует в db. Метод sqlInsert создает объект, поэтому я устанавливаю там идентификатор объекта. И возвращает правильное семя db, но на новой странице im получает 0 как objectID. – jaec86

+0

Я предполагаю, что некоторые вещи ошибочны, @ jaec86. Один из них заключается в том, что вы не объявили область действия на вашем ManagedBean, а по умолчанию - RequestScoped, что означает, что она воссоздана по запросу _every_ HTTP. Вместо того, чтобы начинать с публикации вопросов по StackOverflow, я рекомендую вам начать с [ссылки ссылки JSF Bauke Scholtz] (https://jsf.zeef.com/bauke.scholtz). – DavidS

ответ

1

Поскольку вы используете только @ManagedBean аннотацию на вашем Managed Bean и не указывая каких-либо Scope вас боб явно, ваш Bean будет действовать, как если его @RequestScoped боба. [См link]

Таким образом, каждый раз, когда вы щелкните ваш New Object, бит инициализируется, и вы потеряете состояние (значения переменных).

Подумайте и решите, какую область вы хотите использовать [См. link]. Для ваших потребностей @ViewScoped может выполнить эту работу за вас.

+0

Спасибо, это сработало! – jaec86

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