Передать параметр из ManagedBean на страницу jsf
Я работаю с JSF 2.2 и Tomcat 8, и я только начинаю играть с ними.
У меня есть командная кнопка на странице 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 и получения автоматически сгенерированного ключа, который является целым числом. Если вставка не произошла, она вернет 0.
Я могу перейти к new_page, но param object_id равен 0. Я добавил println, чтобы показать object_id, и это фактический ключ.
Что я делаю неправильно?
1 ответ
Так как вы используете только @ManagedBean
аннотации на вашем управляемом компоненте и без указания явной области действия вашего компонента, ваш компонент будет действовать так, как если бы он был @RequestScoped
боб.[см. ссылку]
Поэтому каждый раз, когда вы нажимаете New Object
Кнопка, Бин повторно инициализируется, и вы потеряете состояние (значения переменных).
Подумайте и решите, какую область вы хотите использовать [см. Ссылку]. Для ваших требований @ViewScoped
может сделать работу за вас.