我正在尝试使用搜索按钮,它会带回所选项目(可以是多个)并更新数据表。然后我在每个colomn旁边有一个selectBooleanCheckbox,当用户选择“n”项时,然后按选择已检查项它插入DB。
代码如下:
<h:panelGrid columns="5">
<h:form>
<h:outputText value="Item Name"/>
<p:inputText value="#{StockController.itemName}"/>
<h:commandButton value="Search" action="#{StockController.Search}">
<f:ajax execute="@form" render=":results"/>
</h:commandButton>
</h:form>
//以下代码示例属于BalusC,请参阅帖子here
<h:panelGroup id="results">
<h:form>
<h:dataTable value="#{bean.entities}" var="entity">
<h:column>
<h:selectBooleanCheckbox value="#{bean.checked[entity.id]}" />
</h:column>
...
</h:dataTable>
<h:commandButton value="Select the checked Items" action="#{StockController.insertDao}" >
<f:ajax execute="@form" render=":results"/>
</h:commandButton>
</h:form>
</h:panelGrid>
现在,我已经阅读了很多博客和Core javaServer Faces 3,我不认为ajax使用中存在逻辑错误。我通过删除每个ajax进行测试然后都工作正常但每当我尝试使用 cummondButtons 和ajax时,第二个“选择已检查的项目“甚至没有调用”StockController.insertDao“方法。
感谢任何帮助。
谢谢大家。
答案 0 :(得分:3)
如果你想要ajax渲染内容而又包含另一个表单,那么你需要在render
属性中包含该表单的ID,否则另一个表单将失去其视图状态而没有任何内容将在提交时处理。
<h:form>
...
<h:commandButton value="Search" action="#{StockController.Search}">
<f:ajax execute="@form" render=":results :resultsForm" />
</h:commandButton>
</h:form>
<h:panelGroup id="results">
<h:form id="resultsForm">
...
</h:form>
</h:panelGroup>
如果在同一<h:form>
内没有任何内容<h:panelGroup>
,那么您可以完全省略<h:panelGroup>
并直接重新呈现表单。
<h:form>
...
<h:commandButton value="Search" action="#{StockController.Search}">
<f:ajax execute="@form" render=":results" />
</h:commandButton>
</h:form>
<h:form id="results">
...
</h:form>
有关