你好我有以下问题。
我有一个搜索页面,我们称之为 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。那我的想法错了吗?或者有没有办法得到它?