大家好 我有模块对象列表。我想向用户显示它,用户可以编辑它并且也可以保存它。在模块对象中有三个成员有1个String moduleName 2.boolean readFlag 3. writFlag。
我正在使用的bean在 Request Scop 我不想使用任何其他scop。 我的问题是单击更新按钮时未调用setterOfThatList。 在同一页面上,我使用另一个inputText,调用连接到此inputText的变量的setter。
<h:dataTable value="#{roleBean.listMatrixDo}" var="list">
<h:column>
<f:facet name="header">
<h:outputText value="Module Name"></h:outputText>
</f:facet>
<h:outputText value="#{list.moduleDo.moduleName}"></h:outputText>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Read Access"></h:outputText>
</f:facet>
<h:selectBooleanCheckbox value="#{list.readFlag}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Write Access"></h:outputText>
</f:facet>
<h:selectBooleanCheckbox value="#{list.writeFlag}" />
</h:column>
</h:dataTable>
答案 0 :(得分:0)
我的问题是点击更新按钮时没有调用setterOfThatList
setter 从不调用集合和嵌套属性。 JSF基本上如下:
((RowObject) bean.getList().get(rowIndex)).setSomeProperty(submittedValue);
获取列表,然后按当前索引获取行对象,然后在其上设置属性。如您所见,重要的是在后续请求中已准备好相同的列表(即您需要在bean的构造函数/ postconstruct中执行此操作)。
这与范围无关。但是,在视图和会话范围中,您无需在后续请求中准备列表。我建议在涉及从数据库加载数据时使用视图范围。
如果您的目的是处理/保存提交的数据,那么您应该在附加到命令按钮的bean的action方法中完成这项工作。
public void submit() {
someService.save(list);
}