gpt4 book ai didi

java - Datatable 如何保存我编辑的值

转载 作者:行者123 更新时间:2023-11-30 09:44:05 25 4
gpt4 key购买 nike

<h:dataTable value="#{studentBean2.studentList}" var="student">
<h:column>
<f:facet name="header">
<h:outputText value="STUDENT-ID" />
</f:facet>
<h:outputText value="#{student.studentId}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="STUDENT-NAME" />
</f:facet>
<h:inputText value="#{student.studentName}" />
</h:column>
.........
.........
</h:dataTable>
<h:commandButton type="submit" action="#{studentBean2.action}" value="ENTER" />

从上面的代码可以在<h:inputText>中编辑数据表的值字段并提交。这些编辑后的值可见于 action() bean的方法StudentBean2 .

当我关注日志时,它显示当我在“应用请求值”阶段提交页面时 getStudentList()方法被调用。在这种方法中,我执行 JDBC 调用以从数据库中获取学生并设置新获取的 studentlist .

但是在“Invoke Application”阶段,方法action()我在提交的列表中得到了编辑后的数据。这到底是怎么发生的?

最佳答案

JSF 已在更新模型值阶段为您设置它们。在此阶段,processUpdates()每个组件的方法都会被调用。如果是 <h:dataTable>这是 UIData#processUpdates() .对于每一行,它将调用输入组件的相同方法,在您的情况下是 UIInput#processUpdates() .

基本上:

get data model of UIData; // studentList = studentBean2.getStudentList()
for (every row of data model) {
get the current row item by index; // student = studentList.get(index)
for (every child UIInput component of UIData) {
set its value; // student.setStudentName(value)
}
}

与具体问题无关,在 getter 方法中执行 JDBC 调用是个坏主意。在 bean 的生命周期中,getter 方法将被调用不止一次,因此 JDBC 调用将不必要地进行太多次。您应该改为在 bean 的(后)构造函数中进行 JDBC 调用。另见 Why JSF calls getters multiple times .

关于java - Datatable 如何保存我编辑的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8064593/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com