[英]how to display the data from database on a button click in java jsf
<f:view>
<h:form>
<h:panelGrid>
<f:facet name="header">
<h:outputText value="Student Mark List"/>
</f:facet>
<h:column>
<h:outputText value="Student Number : "></h:outputText>
<h:inputText value="#{stuBean.stuNumber}"/>
</h:column>
<h:column>
<h:commandButton id = "getStuMarkList" value="Get Mark List" action="#{stuBean.listOfMarks}" >
</h:commandButton> </h:column>
</h:panelGrid>
<h:panelGrid bgcolor="#9AC8E6" width="100%">
<h:dataTable id="datatable" value="#{stuBean.marksList}" var="marksList">
<h:column>
<f:facet name="header">
<h:outputText style=""value="Maths Marks" />
</f:facet>
<h:inputText value="#{marksList.mMarks}" > </h:inputText>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText style=""value="English Marks" />
</f:facet>
<h:inputText value="#{marksList.eMarks}" > </h:inputText>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText style=""value="Physics Marks" />
</f:facet>
<h:inputText value="#{marksList.pMarks}" > </h:inputText>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText style=""value="Social Marks" />
</f:facet>
<h:inputText value="#{marksList.sMarks}" > </h:inputText>
</h:column>
</h:dataTable>
</h:panelGrid>
</h:form>
</f:view>
//... getters and setters
public String listOfMarks(){
student.marksListFromDb(stuNum);
return null;
}
private List marksList= new ArrayList();
public List getMarksList() {
return marksList;
}
請檢查我上面的代碼,其中我試圖在單擊按鈕(listOfMarks)時從數據庫獲取值,並將其顯示在數據表中。 使用上面的代碼並沒有獲取數據。如果我在某些地方做錯了,請幫我...
一些一般的事情:
commandButton中的操作方法應返回void或String 。 字符串用於導航。 如果要重新加載同一頁面,則返回null 。
您正在將markList的getter方法與action方法混合在一起。
您應該有一個操作方法,例如fillMarkList()
來填充列表,返回一個空String並重新加載當前頁面, 並且您應該有一個getter方法getMarkList()
來返回dataTable的列表:
public String fillMarkList() {
// fill the list:
student.markListFromDb(stuNum);
// reload current page:
return null;
}
public List getMarkList() {
return markList();
}
然后,您的按鈕應調用fillMarkList()
作為操作方法:
<h:commandButton id="getStuMarkList"
value="Get Mark List"
action="#{stuBean.fillMarkList}" />
更新:剛注意到您使用h:panelGrid
。 我嘗試了您的版本,它呈現為正確的表格。 但是我認為正確的用法是沒有專欄。 您必須將列號定義為h:panelGrid的屬性,並將包含的元素簡單地放在網格內:
<h:panelGrid columns="3">
<f:facet name="header">
<h:outputText value="Student Mark List"/>
</f:facet>
<h:outputText value="Student Number : "></h:outputText>
<h:inputText value="#{stuBean.stuNumber}"/>
<h:commandButton id = "getStuMarkList" value="Get Mark List"
action="#{stuBean.listOfMarks}" >
</h:commandButton> </h:column>
</h:panelGrid>
盡管“請檢查我的代碼”在這里通常不起作用,但我發現了一件事情:
public List getMarkList() {
student.markListFromDb(stuNum);
return markList;
}
您沒有在此處將任何內容放入markList,是嗎?
編輯:還請注意,它們在執行方面相當相等: #{stuBean.getMarkList}
和#{stuBean.markList}
因為后者很可能會被框架轉換為StudentBean.getMarkList()
,就像#{stuBean.getMarkList}
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.