我有一个自定义组件,它实现UIInput并需要保存一些状态信息,以便以后在回发请求中重用。独立使用它工作正常,但在<ui:repeat>回发中找到最新呈现的数据行的保存状态。动作调用的日志输出是
INFORMATION: myData is "third foo"
INFORMATION: myData is "third foo"
INFORMATION: myData is "third foo"
INFORMATION: ok action
Run Code Online (Sandbox Code Playgroud)
我期望的地方
INFORMATION: myData is "first foo"
INFORMATION: myData is "second foo"
INFORMATION: myData is "third foo"
INFORMATION: ok action
Run Code Online (Sandbox Code Playgroud)
我知道这myComponent是ui:repeat. 那么保存组件状态以便为数据集中的每一行正确恢复它的最佳方法是什么?
我的 XHTML 表单:
<h:form>
<ui:repeat var="s" value="#{myController.data}">
<my:myComponent data="#{s}"/>
</ui:repeat>
<h:commandButton action="#{myController.okAction}" value="ok">
<f:ajax execute="@form" render="@form"/>
</h:commandButton>
</h:form>
Run Code Online (Sandbox Code Playgroud)
我的豆:
@Named
@ViewScoped
public class MyController implements Serializable {
private static final long serialVersionUID …Run Code Online (Sandbox Code Playgroud) static void clean() throws Exception {
final UserTransaction tx = InitialContext.doLookup("UserTransaction");
tx.begin();
try {
final DataSource ds = InitialContext.doLookup(Databases.ADMIN);
Connection connection1 = ds.getConnection();
Connection connection2 = ds.getConnection();
PreparedStatement st1 = connection1.prepareStatement("XXX delete records XXX"); // delete data
PreparedStatement st2 = connection2.prepareStatement("XXX insert records XXX"); // insert new data that is same primary as deleted data above
st1.executeUpdate();
st1.close();
connection1.close();
st2.executeUpdate();
st2.close();
connection2.close();
tx.commit();
} finally {
if (tx.getStatus() == Status.STATUS_ACTIVE) {
tx.rollback();
}
}
}
Run Code Online (Sandbox Code Playgroud)
我有一个web应用程序,则DAO取DataSource为对象创建执行数据库操作的单个连接. …