<p:ajax update =“...&gt; PF subTable内的单元格或行更新

时间:2015-08-29 19:17:40

标签: jsf-2 primefaces

&lt; p&gt;我对JSF的经验不多。我很难在子表中更新特定于动态响应列的单元格&lt; code&gt;&lt; p:ajax update =“response2”=“”... <=“”code =“”>我在哪里d当使用ajax选择单选按钮时,要插入简单的响应文本。我测试过太多可能但没有成功。在我的问题中,ajax组件可以更新单元格或行:它并不重要。通过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>

1 个答案:

答案 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中添加!

修改

我会澄清。您有两种选择:

  1. 如果您的要求允许,请使用PF 5.2并刷新所有表而不是仅刷新当前行字段。这可以使用<p:ajax update=":form1:maintabView:mainTable" ...

  2. 使用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);   
        }       
    }