Я хотел бы обновить в одну колонку в <h:outputText>
путем обработки значения в <h:selectOneRadio>
, расположенной в другом столбце Внутри DataTable:AJAX обновление или визуализации «указывает» правильный ClientId, но не обновляет значение в DataTable
...
<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>
...
ниже мой DataTable и HTML панели Firebug, ниже указывая (автоматически подсвечиваются желтым цветом на Firebug) правильное clientId
когда радио-кнопка нажата, но значение берется из базы данных загружается во время вид сборки внутри <span>
не изменить (от YesR
до NoR
в этом пример).
Значение NoR
приписывается к правильному радиокомпонентом, как показано ниже, но не заменяет YesR
:
Хорошая вещь, что процесс каждой строки не зависит и selectOneRadio
процесс указывает на соответствующий outputPanel1
для каждой строки. Я пробовал разные комбинации <p:ajax update="">
, <f:ajax render="">
и <h:panelGroup>
без успеха. Я также пробовал различные события, такие как click
, change
и без успеха.
В чем причина того, что значение в outputPanel1
не обновляется?
Я использую WildFly 9.0.2 (Mojarra 2.2.12) с RichFaces 4.5.8 (или PF5.3) (протестирован в разных браузерах).
EDIT (для onepotato):
<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>
Bean:
@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;
}
Что делает слушатель? Он должен работать без него. – Makhiel
Да, он работает без него. (Содержит метод проверки sysout) – LEK
Я удалил свой ответ, поскольку понял, что наши случаи, вероятно, не совпадают. Глядя на код, который вы опубликовали, он должен работать, даже без слушателя. Не могли бы вы предоставить код для содержимого связанной таблицы и управляемого компонента, чтобы я мог воспроизвести ее на моей машине? – Bnrdo