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



我在弹出窗口
中有一个弹出窗口,我有一个表单<h:form id="vpmoForm">在这个里面我有一个数据表<p:dataTable id="reqTypeDtbl">在该数据表中,我有一个<h:inputText id="except" >,我正在基于条件渲染。在这里,<h:inputText id="except" >应该基于同一数据表中
另一列中 ajax 事件<h:selectOneMenu>其他组件进行渲染
我在支持豆中得到了条件,但是如何更新<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:selectOneMenu>渲染<h:inputText>,并且我想从支持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.

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

看看你是否可以把它放在一个容器里:

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

如果您有权从托管 Bean 访问 rowIndex,则可以执行更具体的更新

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

从托管 Bean 更新它:

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

最新更新