2012-05-15 3 views
0

Здравствуйте, у меня возникла следующая проблема.Форма поиска, перенаправляющая на страницу результатов

У меня есть страница поиска, назовите его search.xhtml и вы можете найти штрих-код. Это значение является уникальным, так что результат всегда один или ноль объектов из базы данных

<p:panelGrid columns="1" style="margin:20px;"> 
    <h:form> 
    <p:messages id="messages" globalOnly="true" showDetail="false" /> 
    <p:message for="barcode" /> 

    <p:inputText id="barcode" value="#{searchForm.barCode}" 
       required="true" requiredMessage="Value needed" /> 

    <p:commandButton value="search" 
        action="#{searchForm.searchBarcode}" id="search"/> 

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

Это backingbean:

@ManagedBean 
@ViewScoped 
public class SearchForm extends BasePage { 
    private Long barCode; 

    @ManagedProperty("#{daoManager}") 
    public DaoManager daoManager; 

    public void setDaoManager(DaoManager daoManager) { 
    this.daoManager = daoManager; 
    } 
    public Long getBarCode() { 
    return barCode; 
    } 
    public void setBarCode(Long barCode) { 
    this.barCode = barCode; 
    } 
    public String searchBarcode() { 
    //request to dao to get the object 
    DataList<Data> data = daoManager.findbybarcode(barCode); 
    if (data.size() == 0) { 
     this.addMessage(FacesMessage.SEVERITY_ERROR, 
         "Not Found: " + barCode); 
     return null; 
    } else {  
     getFacesContext().getExternalContext(). 
     getRequestMap().put("id", data.getId()); 
     return "details"; 
    } 
    } 

Так что, если я иду на моей странице сведений, которые ожидают, что идентификатор параметра это не будет отправьте на страницу сведений.

отступающие детали фасоли страницы:

@ManagedBean 
@ViewScoped 
public class DetailBean extends BasePage implements Serializable { 
    @PostConstruct 
    public void init() { 
    if (id != null) { 
     //Go on with the stuff 
    } else { 
     addMessage(FacesMessage.SEVERITY_ERROR,"Object not found"); 
    }  
    } 
} 

Что я делаю неправильно? И разве это неправильное использование JSF? Я знаю, что могу создать список и щелкнуть по результату, но это не то, что я хочу. Также я могу взять штрих-код из первого компонента и передать его в качестве параметра, но я хочу, чтобы страница сведений только принимала идентификатор от объектов. Так я ошибаюсь? Или есть решение, чтобы получить это так?

ответ

1

Если я правильно понял, вы хотите передать идентификатор штрих-кода на страницу details, и да, это возможно.

getFacesContext().getExternalContext().getRequestMap().put("id", data.getId()); 

следующая строка ввода параметра ID в запросе, что клиент просто послал вас, но навигация действие на details приведет к другому запросу. Попробуйте вместо этого:

return "details?faces-redirect=true&id=" + data.getId(); 

Это возвратит навигационный действие HTTP GET с идентификатором штрих-кода, переданного в качестве параметра запроса в запросе.

+0

Ну, я пробовал это, но тогда и карта запроса не содержит идентификатора. Пусто. – Tankhenk

+0

@Tankhenk Смотрите мое редактирование выше ... Я исправил строку запроса. Для того чтобы его можно было рассматривать отдельно, вы должны передать параметр 'faces-redirect = true' для фактического выполнения перенаправления. –

+0

Большое спасибо. Я попробовал это уже с face-redirect = true, но не работал, потому что у меня было какое-то умное завивание: details? Faces-redirect = true? Id = Но, конечно, мне нужно использовать знак &! Спасибо, что открыли глаза! – Tankhenk

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