JSF-Primefaces - 在对话框内的表单内更新数据表内的组件

时间:2014-02-11 13:19:13

标签: jquery jsf jsf-2 primefaces datatable

我弹出窗口中有一个弹出窗口我在其中有一个<h:form id="vpmoForm">形式我有一个数据表<p:dataTable id="reqTypeDtbl">并且在数据表中我有一个<h:inputText id="except" >我正在渲染基于条件。 这里<h:inputText id="except" >应该基于同一数据表中另一列中的另一个组件<h:selectOneMenu> ajax事件进行渲染
我在支持bean中得到了条件但是如何更新<h:inputText id="except" >以在数据表中呈现它。

我使用的代码如下所示

<p:dataTable id="reqTypeDtbl" scrollable="true" scrollHeight="150"
value="#{Bean.ReqDetailslsList}"
rowIndexVar="index" var="eachrow">
    <h:selectOneMenu id="tssreq" value="#{vpmoReqDtlRow.tssReqId}"
rendered="#{Bean.vpmoEditFlag == true}">
<f:selectItems value="#{Bean.vpmoTSSList}"
var="tss" itemLabel="#{tss.label}" itemValue="#{tss.value}" />
<p:ajax  listener="#{Bean.getTssId}"  
execute="@this" partialSubmit="true" />
<f:param name="rowidno" value="#{index}" required="true" />
</h:selectOneMenu>
  <h:inputText value="#{eachrow.exceptionNum}" id="except" style="width:100%"  rendered="#{Bean.EditFlag == true and eachrow.tssReqId eq 'Y'}" />
</p:dataTable >


如上所述,我想在调用其ajax事件时基于另一个组件<h:inputText>呈现<h:selectOneMenu>,并且我想从支持bean启用<h:inputText>
这是我用于Ajax方法的代码

public void getTssId(AjaxBehaviorEvent evt) {
Map<String, String> params = FacesContext.getCurrentInstance()
                .getExternalContext().getRequestParameterMap();
            int index = Integer.parseInt(params.get("rowidno"));
                String selected = vpmoReqDetailslsList.get(index).getTssReqId();
        if (selected.equalsIgnoreCase("y")) {
            vpmoReqDetailslsList.get(index).setTssReqId("Y");
            RequestContext requestContext = RequestContext.getCurrentInstance();
            requestContext.update(":vpmoForm:reqTypeDtbl:except"); //.....I AM TRYING TO UPDATE THE UI FROM HERE 
        }


I am trying to find a way to update the `<h:inputText id="except" >` component from the backing bean so that it can render in the UI.<br/> 
Any suggestions will be really helpful to resolve this issue.

1 个答案:

答案 0 :(得分:0)

如果组件未呈现,您将无法更新它(据我所知)。

看看你是否可以将它放在容器中:

<p:outputPanel id="txt">
    <p:inputText value="#{bean.value}" rendered="#{bean.condition}" />
</p:outputPanel>

<p:commandButton update="txt" value="Send" />

如果您可以从managedbean访问rowIndex,则可以执行更具体的更新

<p:outputPanel styleClass="updateMe#{index}">
    <p:inputText value="#{item.name}" rendered="#{bean.condition}" />
</p:outputPanel>

从您的managedbean更新它:

RequestContext.getCurrentInstance().update("@(.updateMe" + index + ")");