AJAX 更新或呈现 "points" 正确的 clientId 但不更新数据表中的值
AJAX update or render "points" the correct clientId but does not update the value in datatable
我想通过处理位于数据表内另一列中的 <h:selectOneRadio>
的值来更新一列中的 <h:outputText>
:
...
<rich:column>
<h:selectOneRadio id="mainSelect" value="#{row.select1}" required="true" >
<f:selectItems value="#{row.responses}" var="resp" itemLabel="#{resp.label}" itemValue="#{resp.response}" />
<a4j:ajax event="change" render="outputPanel1"
listener="#{subTableView.updateSecond(row.select1)}" />
</h:selectOneRadio>
</rich:column>
<rich:column>
<a4j:outputPanel id="outputPanel1">
<h:outputText value="#{row.select1}"/>
<p>#{component.clientId}</p>
</a4j:outputPanel>
</rich:column>
...
请参阅下方我的数据表和 Firebug 的 HTML 面板下方指向(由 Firebug 自动以黄色突出显示)正确的 clientId
当单击单选按钮时,但从 <span>
内的视图构建时加载的数据库中获取的值不会更改(在本例中从 YesR
到 NoR
)。
NoR
值归因于正确的无线电组件,如下所示,但不会替换 YesR
:
好处是每一行的进程都是独立的,selectOneRadio
进程指向每一行对应的outputPanel1
。我尝试了 <p:ajax update="">
、<f:ajax render="">
和 <h:panelGroup>
的不同组合,但都没有成功。我还尝试了 click
、change
和 valueChange
等不同的事件,但都没有成功。
outputPanel1
中的值未更新的原因可能是什么?
我正在使用 WildFly 9.0.2 (Mojarra 2.2.12) 和 RichFaces 4.5.8(或 PF5.3)(在不同的浏览器上测试过)。
编辑(对于一个土豆):
<rich:dataTable id="grid" width="5000"
value="#{subTableView.getAllHeaders()}"
var="head" >
<rich:column colspan="3" >
<h:outputText value="#{head.name}" />
</rich:column>
<rich:collapsibleSubTable id="cellGrid" value="#{head.questions}" var="row" >
<rich:column>
<h:outputText value="#{row.question}" />
</rich:column>
<rich:column>
<h:selectOneRadio id="mainSelect" value="#{row.select1}" required="true" >
<f:selectItems value="#{row.responses}" var="resp" itemLabel="#{resp.label}" itemValue="#{resp.response}" />
<a4j:ajax event="change" render="outputPanel1"
listener="#{subTableView.updateSecond(row.select1)}" />
</h:selectOneRadio>
</rich:column>
<rich:column>
<a4j:outputPanel id="outputPanel1">
<h:outputText value="#{row.select1}"/>
<p>#{component.clientId}</p>
</a4j:outputPanel>
</rich:column>
</rich:collapsibleSubTable>
</rich:dataTable>
豆豆:
@ManagedBean
@ViewScoped
public class SubTableView implements Serializable{
private static final long serialVersionUID = 1L;
@EJB
private PublicService publicService;
private List<Response> responses;
private Response response = new Response();
private List<Header> headers;
private Header header = new Header();
@PostConstruct
public void init() {
this.responses = publicService.getAllResponses();
this.headers = publicService.getAllHeaders();
}
+getters & setters
服务:
@PersistenceContext
private EntityManager entityManager;
public List<Header> getAllHeaders(){
List<Header> headers = entityManager.createQuery("select h from Header h",Header.class).getResultList();
for(Header h : m.getHeaders())
{
headers.add(h);
for(Question q : h.getQuestions())
{
}
}
return headers;
}
虽然之前用 PrimeFaces 数据表尝试过几次:PFS 终于在这里(RF 数据表)工作了:
我在 selectOneRadio 中添加了以下 ajax 行:<p:ajax update="@(.status)" />
目标列:
<h:panelGroup id="outputPanel1" styleClass="status">
<h:outputText id="display1" value="#{row.answer.select1}" />
</h:panelGroup>
但现在我遇到了以下问题:TabView First Tab not toggled as expected
我想通过处理位于数据表内另一列中的 <h:selectOneRadio>
的值来更新一列中的 <h:outputText>
:
...
<rich:column>
<h:selectOneRadio id="mainSelect" value="#{row.select1}" required="true" >
<f:selectItems value="#{row.responses}" var="resp" itemLabel="#{resp.label}" itemValue="#{resp.response}" />
<a4j:ajax event="change" render="outputPanel1"
listener="#{subTableView.updateSecond(row.select1)}" />
</h:selectOneRadio>
</rich:column>
<rich:column>
<a4j:outputPanel id="outputPanel1">
<h:outputText value="#{row.select1}"/>
<p>#{component.clientId}</p>
</a4j:outputPanel>
</rich:column>
...
请参阅下方我的数据表和 Firebug 的 HTML 面板下方指向(由 Firebug 自动以黄色突出显示)正确的 clientId
当单击单选按钮时,但从 <span>
内的视图构建时加载的数据库中获取的值不会更改(在本例中从 YesR
到 NoR
)。
NoR
值归因于正确的无线电组件,如下所示,但不会替换 YesR
:
好处是每一行的进程都是独立的,selectOneRadio
进程指向每一行对应的outputPanel1
。我尝试了 <p:ajax update="">
、<f:ajax render="">
和 <h:panelGroup>
的不同组合,但都没有成功。我还尝试了 click
、change
和 valueChange
等不同的事件,但都没有成功。
outputPanel1
中的值未更新的原因可能是什么?
我正在使用 WildFly 9.0.2 (Mojarra 2.2.12) 和 RichFaces 4.5.8(或 PF5.3)(在不同的浏览器上测试过)。
编辑(对于一个土豆):
<rich:dataTable id="grid" width="5000"
value="#{subTableView.getAllHeaders()}"
var="head" >
<rich:column colspan="3" >
<h:outputText value="#{head.name}" />
</rich:column>
<rich:collapsibleSubTable id="cellGrid" value="#{head.questions}" var="row" >
<rich:column>
<h:outputText value="#{row.question}" />
</rich:column>
<rich:column>
<h:selectOneRadio id="mainSelect" value="#{row.select1}" required="true" >
<f:selectItems value="#{row.responses}" var="resp" itemLabel="#{resp.label}" itemValue="#{resp.response}" />
<a4j:ajax event="change" render="outputPanel1"
listener="#{subTableView.updateSecond(row.select1)}" />
</h:selectOneRadio>
</rich:column>
<rich:column>
<a4j:outputPanel id="outputPanel1">
<h:outputText value="#{row.select1}"/>
<p>#{component.clientId}</p>
</a4j:outputPanel>
</rich:column>
</rich:collapsibleSubTable>
</rich:dataTable>
豆豆:
@ManagedBean
@ViewScoped
public class SubTableView implements Serializable{
private static final long serialVersionUID = 1L;
@EJB
private PublicService publicService;
private List<Response> responses;
private Response response = new Response();
private List<Header> headers;
private Header header = new Header();
@PostConstruct
public void init() {
this.responses = publicService.getAllResponses();
this.headers = publicService.getAllHeaders();
}
+getters & setters
服务:
@PersistenceContext
private EntityManager entityManager;
public List<Header> getAllHeaders(){
List<Header> headers = entityManager.createQuery("select h from Header h",Header.class).getResultList();
for(Header h : m.getHeaders())
{
headers.add(h);
for(Question q : h.getQuestions())
{
}
}
return headers;
}
虽然之前用 PrimeFaces 数据表尝试过几次:PFS 终于在这里(RF 数据表)工作了:
我在 selectOneRadio 中添加了以下 ajax 行:<p:ajax update="@(.status)" />
目标列:
<h:panelGroup id="outputPanel1" styleClass="status">
<h:outputText id="display1" value="#{row.answer.select1}" />
</h:panelGroup>
但现在我遇到了以下问题:TabView First Tab not toggled as expected