[英]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.