こんにちは、次の問題があります。
search.xhtml という名前の検索ページがあり、バーコードを検索できます。この値は一意であるため、結果は常にデータベースからの 1 つまたは 0 個のオブジェクトになります。
<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>
これはバッキングビーンです:
@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 のみを受け入れるようにします。では、私の考えは間違っていますか?または、このようにする解決策はありますか?