Передавать значения между управляемыми компонентами разных страниц - PullRequest
0 голосов
/ 11 января 2012

Я не могу передать значения между двумя управляемыми компонентами разных страниц.Я реализую компонент поиска JSF на домашней странице.Я запрашиваю некоторые значения, и когда пользователь нажимает кнопку поиска, он переходит на страницу результатов поиска.На странице результатов поиска есть JSF-компонент SEARCH RESUKTS, который должен получить доступ к выделению в управляемом компоненте, которое соответствует окну поиска на домашней странице.

Я пробовал использовать инъекцию, но оно показало, что поле Managed BEanпереустановлен, показывая значение по умолчанию.Я выбираю интерес в окне поиска, например, Кинотеатр, затем нажимаю кнопку поиска, которая приводит меня к результатам поиска, я надеюсь увидеть кино, но вижу Спорт как значение по умолчанию.Пожалуйста, найдите код ниже.

РЕЗУЛЬТАТ ПОИСКА УПРАВЛЯЕМЫХ БИН

import javax.el.ELContext;
import javax.faces.bean.ApplicationScoped;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;

@ManagedBean
@ApplicationScoped
public class ExpSearchResultsMB {

    /** Creates a new instance of ExpSearchResultsMB */
    public ExpSearchResultsMB() {
    }


 @ManagedProperty(value="#{expSearchBoxMB.selectedValue}")
      private String  selectedValue; // +setter
    @ManagedProperty(value="#{expSearchBoxMB.text}")
    private String prova;

    public String getProva() {
        return prova;
    }

    public void setProva(String prova) {
        this.prova = prova;
    }
    public String getSelectedValue() {

        return selectedValue;
    }

    public void setSelectedValue(String selectedValue) {
        this.selectedValue = selectedValue;
    }
}

ПОИСК КОРОБКИ УПРАВЛЯЕМЫХ БИН

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


@ManagedBean
@ApplicationScoped
public class ExpSearchBoxMB {
    public Date date;
   public List<String> interests=new ArrayList<String>();

      public String selectedValue="Sport";
    public String getSelectedValue() {
        return selectedValue;
    }
    public void setSelectedValue(String selectedValue) {
        this.selectedValue = selectedValue;
    }

    public List<String> getInterests() {

        interests.add("Sport");
        interests.add("Musin");
        interests.add("Art");
        interests.add("Thatre");
        interests.add("Cinema");
        return interests;
    }

    public void setInterests(List<String> interests) {
        this.interests = interests;
    }

Буду признателен за любую помощь.

Приветствия

Ответы [ 2 ]

0 голосов
/ 12 января 2012

Вы можете попробовать это:

<h:panelGrid columns="2" >
   <h:form>

      <h:outputLabel for="prova" value="Prova: " />
      <h:inputText binding="#{prova}" id="prova" />

      <h:outputLabel for="interest" value="Interest: " />
      <h:selectOneMenu binding="#{interest}" id="interest" >
         <f:selectItems value="#{expSearchBoxMB.interests}" var="i" 
                        itemLabel="#{i}" itemValue="#{i}" />
      </h:selectOneMenu>

      <h:button value="Search" outcome="Result">
         <f:param name="prova"    value="#{prova.value}" />
         <f:param name="interest" value="#{interest.value}" />
      </h:button>

   </h:form>
</h:panelGrid>

Тогда в вашем ExpSearchResultsMB вы можете получить значение следующим образом:

@ManagedBean
@ViewScoped
public class ExpSearchResultsMB {
    private String interest;
    private String prova;
    private String statusMsg;


    @PostConstruct
    public void prepareResult() {
        HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
        this.interest = request.getParameter("interest");
        this.prova    = request.getParameter("prova");

        if (interest == null || prova == null) statusMsg = "Please provide all information";
        else {
            // Prepare result to show to the user
        }
    }

    // Getters and Setters
}

Если вы используете @RequestScoped для ExpSearchResultsMB вместо @ViewScoped, вы можете использовать @ManagedProperty, чтобы получить указанное ниже значение:

@ManagedProperty(value="#{param.prova}"})
private String prova;
@ManagedProperty(value="#{param.interest}"})
private String interest;
0 голосов
/ 11 января 2012

Я бы сказал, отладка и проверить, правильно ли установлено значение при изменении выбора интересов.

Если все правильно, но вы видите неправильные результаты, попробуйте использовать следующий код в ExpSearchResultsMB

FacesContext context = FacesContext.getCurrentInstance();
ExpSearchBoxMB expSearchBoxMBBean = (ExpSearchBoxMB) context.getApplication().evaluateExpressionGet(context, "#{expSearchBoxMB}", ExpSearchBoxMB.class);

expSearchBoxMBBean.getSelectedValue() 
...