【问题标题】:h:inputText value inside rich:modalPanel not binding to backing beanh:inputText 里面的值:modalPanel 没有绑定到支持 bean
【发布时间】:2012-07-06 07:29:51
【问题描述】:

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

Modal 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>

Backing Bean(接缝组件)

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 
     }  

}

【问题讨论】:

    标签: java jsf richfaces seam


    【解决方案1】:

    是的,原因很简单:您在&lt;a4j:commandLink/&gt; 中使用了immediate=true。此选项使 JSF 调用 addCompany() 函数 BEFORE 值被转换并更新模型。

    解决方案同样简单:从&lt;a4j:commandLink/&gt; 中删除immediate=true 属性。

    【讨论】:

    • 实际上这是问题的一部分,我还必须添加一个丰富的:模态属性 domElementAttachment="parent" ,我在网上阅读过它,但仍然感到困惑,它仍然有效。如果您可以在此处详细说明此属性,那就太好了。我喜欢你的简单解释。谢谢! :)。
    • domElementAttachment 告诉richfaces 将&lt;rich:modalPanel/&gt; 的html 放置在哪里(这是一个弹出窗口)。通常弹出窗口定位为&lt;body&gt; 标记的子级,否则它们可能会被其他元素重叠。在您的情况下,弹出窗口包含输入元素但没有 &lt;form&gt; 标记,因此它将元素 OUTSIDE 呈现为表单,这就是它们不起作用的原因。
    【解决方案2】:

    也许复合组件位于表单内部,并且在表单中您有另一个组件绑定到 bean 的 companyName 属性。为您的rich:modalPanel 添加一个表单并将其移到包含的实际表单之外。你的代码应该是这样的:

    <rich:modalPanel id="AddDmpCompanyModalId" ... >
        <f:facet name="header">
            <h:outputText value="Add Company"/>
        </f:facet>
        <h:form>
            <a4j:outputPanel id="addDmpCompanyInputPanel">
                ...
            </a4j:outputPanel>
        </h:form>
    </rich:modalPanel>
    

    更多信息:

    【讨论】:

      猜你喜欢
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-13
      • 2012-04-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多