Изменение инициализированных ранее bean-компонентов в face-config.xml - PullRequest
1 голос
/ 03 марта 2011
public class MyBean {
    private Integer [] myField;


    public Integer [] getMyField() {
        return myField;
    }
    public void setMyField(Integer [] myField) {
        this.myField = myField;
    }

И я инициализирую этот же bean-компонент в face-config.xml следующим образом:

<managed-bean-name>myBean</managed-bean-name>
        <managed-bean-class>com.path.bean.MyBean</managed-bean-class>
        <managed-bean-scope>request</managed-bean-scope>
        <managed-property>
            <property-name>myField</property-name>
            <list-entries>
                    <value>6</value>
                    <value>12</value>
                    <value>24</value>       
            </list-entries>
        </managed-property>        
    </managed-bean>

Затем в приложении я хочу изменить эти значения.Для этого:

        MyBean myBean = new MyBean();
        Integer [] results = myBean.getMyfield();
        //Change the value of this array
        visualizationBean.setResultsPerPage(results);

Но это невозможно, Integer [] results = myBean.getMyfield() дает мне null.Во всяком случае, в интерфейсе моего приложения я вижу, что компонент правильно инициализируется, поскольку он содержит значения 6, 12 и 24.
Любая помощь?Заранее спасибо

Ответы [ 2 ]

3 голосов
/ 03 марта 2011

Когда вы создаете экземпляр MyBean, используя new, он не будет искать Faces-Config. и он просто создаст объект с помощью конструктора.

Если вы используете jsf2.0 make bean для инициализации, когда ваш контекст инициализируется с помощью

@ManagedBean(eager=true)

и извлеките экземпляр Bean с карты области. если область его применения ограничена.

MyBean mb = (MyBean)FacesContext.getCurrentInstance().getExternalContext().getApplicationMap().get("beanName");

Обновление:

ваш управляемый боб должен выглядеть так:

import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;

@ManagedBean(eager="true")
@RequestScoped
public class MyBean {

если вы просто хотите использовать свой компонент в другом компоненте, тогда, как BalusC предложил просто ввести его и получить заполненное значение, без использования new

например: если вы хотите, чтобы ваш MyBean популировал в SomeOtherBean, тогда

@ManagedBean()
@RequestScoped
public class SomeOtherBean {
   @ManagedProperty(value="#{myBean}") 
   private MyBean myBean;
   //getters & setters of myBean

Обновление

для jsf 1.2, аннотаций нет, вам нужно настроить faces-config.xml, как показано ниже

<managed-bean>
    <managed-bean-name>myBean</managed-bean-name>
    <managed-bean-class>com.example.my.MyBean</managed-bean-class>
    <managed-bean-scope>request</managed-bean-scope>
</managed-bean>

<managed-bean>
    <managed-bean-name>someAnotherBean</managed-bean-name>
    <managed-bean-class>com.example.some.AnotherBean</managed-bean-class>
    <managed-bean-scope>request</managed-bean-scope>
    <managed-property>
        <property-name>myBean</property-name>
        <value>#{myBean}</value>
    </managed-property>
</managed-bean>
1 голос
/ 03 марта 2011

Вы создаете объект с использованием нового типа MyBean myBean = new MyBean();

Так что вы обязательно получите ноль.

...