2012-05-15 50 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"; 
    } 
    } 

所以,如果我去我的個人資料頁,其中預計參數ID這個心不是發送到詳細信息頁面。

後臺bean的詳細信息頁:

@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的錯誤使用?我知道我可以生成一個列表並點擊結果,但那不是我想要的。另外,我可以從第一個bean中獲取條形碼並將其作爲參數傳遞,但我希望詳細信息頁面只接受來自對象的id。我的思想錯了嗎?或者有沒有解決方案來得到它?

回答

1

如果我理解正確,您希望將條形碼的ID傳遞給details頁面,並且是可以的。

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

下面的行把ID參數到請求的客戶端剛發了一封,但導航行動details將導致不同的要求。試試這個:

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

這將返回一個HTTP GET導航操作,該請求中作爲請求參數傳遞的條形碼的ID。

+0

嗯,我試過這個,但也請求地圖不包含id。它是空的。 – Tankhenk

+0

@Tankhenk看到我上面的編輯...我修正了請求字符串。要將它視爲一個單獨的請求,您必須傳遞'faces-redirect = true'請求參數以實際執行重定向。 –

+0

非常感謝。我已經用faces-redirect = true試過了,但沒有奏效,因爲我有一些想法扭曲輸入:details?faces-redirect = true?id =但是我當然需要使用&sign!感謝您睜開眼睛! – Tankhenk