Java h:inputText值在rich:modalPanel中未绑定到支持bean

Java h:inputText值在rich:modalPanel中未绑定到支持bean,java,jsf,richfaces,seam,Java,Jsf,Richfaces,Seam,当我单击save按钮时,会调用'addCompany'操作,但当我调试并在我的支持bean中看到实例变量companyName的值时,它显示为null。我想我犯了一个愚蠢的错误 模态XHTML:包含在另一个XHTML的表单标记中 <ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets"

当我单击save按钮时,会调用'addCompany'操作,但当我调试并在我的支持bean中看到实例变量companyName的值时,它显示为null。我想我犯了一个愚蠢的错误

模态XHTML:包含在另一个XHTML的表单标记中

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
                    xmlns:ui="http://java.sun.com/jsf/facelets"
                    xmlns:h="http://java.sun.com/jsf/html"
                    xmlns:a4j="http://richfaces.org/a4j"
                    xmlns:rich="http://richfaces.org/rich"
                    xmlns:f="http://java.sun.com/jsf/core">

        <rich:modalPanel id="AddDmpCompanyModalId"
                             showWhenRendered="#{companyAdminAction.showAddCompanyModal}"
                             width="500"
                             height="340"
                             autosized="true">

                <f:facet name="header">
                    <h:outputText value="Add Company"/>
                </f:facet>


                <a4j:outputPanel id="addDmpCompanyInputPanel">

                            <label style="font-weight:bold;margin-top:5px">Name: </label>
                            <h:inputText id="companyName"  value="#{companyAdminAction.companyName}"/>

                                <a4j:commandLink id="submit-add-company-name-link"
                                                 immediate="true"
                                                 action="#{companyAdminAction.addCompany()}"
                                                 styleClass="button"
                                                 reRender="AddDmpCompanyModalId,addDmpCompanyInputPanel"
                                                 limitToList="true">
                                    <span class="inner-button">Save</span>
                                </a4j:commandLink>


                </a4j:outputPanel>

            </rich:modalPanel>

    </ui:composition>

可能复合组件在表单中,并且在表单中您有另一个组件绑定到bean的
companyName
属性。为您的
rich:modalPanel
添加一个表单,并将其移到实际包含的表单之外。您的代码应该如下所示:




是的,原因很简单:您在
中使用了
immediate=true
。此选项使JSF在转换值和更新模型之前调用
addCompany()
函数


解决方法同样简单:从

中删除
immediate=true
属性实际上这是问题的一部分,我还必须添加一个丰富的:modal属性domElementAttachment=“parent”,我在网上读到了它,但仍然感到困惑,它无论如何都能起作用。如果你能在这里详细说明这个属性,那就太好了。我喜欢你简单的解释。谢谢!:)
DomeElementAttachment
告诉richfaces在哪里放置
的html(这是一个弹出窗口)。通常,弹出窗口被定位为
标记的子项,因为否则它们可能会被其他元素重叠。在您的例子中,弹出窗口包含输入元素,但没有
标记,因此它在表单外部呈现元素,这就是它们不起作用的原因。
Name("companyAdminAction")
@Scope(ScopeType.CONVERSATION)
public class CompanyAdmin {

    private String companyName;     

    public String getCompanyName() {
        return companyName;
    }

    public void setCompanyName(String companyName) {
        this.companyName = companyName;
    }

      public void addCompany() {
    // On click of save debugger comes here, but shows the value of          
      //companyName as null 
     }  

}