当我单击“保存”按钮时,会调用“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(Seam组件)
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
}
}
答案 0 :(得分:0)
也许复合组件在一个表单中,并且在表单中你有另一个组件绑定到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>
更多信息:
答案 1 :(得分:0)
是的,原因很简单:您在immediate=true
中使用<a4j:commandLink/>
。此选项使JSF调用转换addCompany()
函数 BEFORE 值并更新模型。
解决方案同样简单:从immediate=true
删除<a4j:commandLink/>
属性。