listener
调用的方法有效:似乎问题是ajax组件的使用。在我的问题中,subTable用于标题显示,这是必需的。我已经看过很多关于这个主题的帖子,但它对我没有帮助。
我正在使用JBoss 7.1.1和PF5.2。
提前感谢您的时间。
<h:body>
<h:form id="form1">
<p:tabView id="tabView1" prependId="false" >
<p:tab title="TAB1" >
<p:dataTable id="mainTable" var="head" value="#{subTableView.headers}" editable="true" editMode="cell">
<p:subTable id="subbTable" var="question" value="#{head.questions}" >
<f:facet name="header">
<h:outputText value="#{head.name}" />
</f:facet>
<p:column>
<h:outputLabel value="#{question.question}" />
</p:column>
<p:column>
<p:selectOneRadio id="mainSelect" value="#{question.select1}">
<f:selectItem itemLabel="Yes" itemValue="#{question.responseOfYes}" />
<f:selectItem itemLabel="No" itemValue="#{question.responseOfNo}" />
<p:ajax update="response2" process=":form1:tabView1:mainTable"
listener="#{questionBean.saveAnswers(question.select1,question.id)}" />
</p:selectOneRadio>
</p:column>
<p:column id="colToUpdate">
<h:outputText id="response2" value="#{question.select1}" binding="#{input2}" />
</p:column>
</p:subTable>
</p:dataTable>
</p:tab>
<p:tab title="TAB2">
</p:tab>
答案 0 :(得分:0)
摘自this @BalusC回答:
然而,由于Mojarra 2.2.5开始支持它(它只是停止验证它;因此你再也不会面对提到异常的问题了;后来计划了另一个增强修复)。
这仅适用于当前的MyFaces 2.2.7和PrimeFaces 5.2版本。未来版本可能会提供支持。同时,最好的办法是更新迭代组件本身,或者更新父组件以防万一它不提供HTML,例如。
我在Mojarra 2.2.11中成功检查了它。如果您允许每次用户点击答案时更新所有问题,请使用:
<p:ajax update=":form1:maintabView:mainTable" ...
我希望这将在PF 5.3中添加!
修改强>
我会澄清。您有两种选择:
如果您的要求允许,请使用PF 5.2并刷新所有表而不是仅刷新当前行字段。这可以使用<p:ajax update=":form1:maintabView:mainTable" ...
。
使用Mojarra 2.2.5+,所以不应使用p:dataTable和p:subTable,而应仅使用手动构建迭代结构 JSF标准组件,如h:dataTable或ui:repeat。我成功地尝试了这段代码。注意我可以引用一个行元素 来自命令组件。页面:
<h:form id="form">
<ui:repeat id="list" value="#{yourBean.lista}" var="item">
<h:outputText id="item" value="#{item}" /><br/>
</ui:repeat>
<p:commandButton onclick="return false;" value="Prueba" render=":form:list:1:item" action="#{yourBean.updateSecond()}"/>
<h:commandButton value="Update second item">
<f:ajax render=":form:list:1:item" listener="#{yourBean.updateSecond()}"/>
</h:commandButton>
</h:form>
支持bean:
@Named
@ViewScoped
public class yourBean implements Serializable{
private static final long serialVersionUID = 1L;
private List<Integer> lista = new ArrayList<>();
public List<Integer> getLista() {
return lista;
}
public void updateSecond(){
this.lista.set(1, 9999);
}
@PostConstruct
public void populateModel(){
lista = Arrays.asList(1,2,3,4,5,6,7,8,9);
}
}