希望我清楚地提出了我的问题。我继承了相当复杂的jsf 2.x Web应用程序。有foo.xhtml
个具有p:tabView
组件的选项卡之一,其中包含可编辑的p:dataTable
。每当我单击p:commandButton id="addBtn"
按钮时,都会创建一行并允许我添加数据。
我遇到的麻烦是我必须在p:selectOneMenu
组件上单击两次才能选择一个值(“ A”或“ B”),但这仅在特定条件下发生。希望在下面提出的两个案例可以清楚地解释我要描述的事件。
场景A)
1.我首先填写p:inputText
输入字段。
2.点击下拉框(例如p:selectOneMenu
),显示A和B,然后消失(失去焦点?)
3.再次单击下拉框,显示A和B。
4.我可以选择任何一个值。
场景B)
1.单击下拉框(例如p:selectOneMenu
),它显示A和B(焦点保持在打开状态)。
2.我可以选择任何一个值。
这是main.xhtml
<h:form id="form">
<ui:include src="/somepath/foo.xhtml"/>
</h:form>
这是foo.xhtml
<ui:composition ..>
<p:tabView id="tabview">
<p:tab id="fooTab">
<h:panelGrid>
<p:dataTable id="table" value=".." var="..">
<p:column id="nameColumn">
<p:inputText id="name" value="..">
<p:ajax event="blur" listener="#{fooController.actionA}" update=":tabview:table" />
</p:inputText>
</p:column>
<p:column id="choiceColumn">
<p:selectOneMenu id="choice" value="..">
<f:selectItem itemLabel="Select One" itemValue=""/>
<f:selectItem itemLabel="A" itemValue="true" />
<f:selectItem itemLabel="B" itemValue="false" />
<p:ajax event="change" listener="#{fooController.actionB"} update=":tabview:table" />
</p:column>
<p:column id="deleteColumn" headerText="Delete">
<p:commandButton id="deleteBtn" value="Delete" actionListener="#{fooController.actionC}" action="#{fooController.delete}" update="table" />
</p:column>
</p:dataTable>
<p:commandButton id="addBtn" value="Add" actionListener="#{fooController.actionD}" action="#{fooController.add" update=":tabview:table" />
</h:panelGrid>
</p:tab>
<p:tab id="barTab">
...
</p:tab>
</p:tabView>
我尝试了各种方法来解决此问题,主要集中在p:inputText
组件上的update属性,但是我还没有成功。我很难理解为什么会这样。非常感谢您的专业知识和时间来解答这个问题。