【问题标题】:use multiple form instances jsf 2.0使用多个表单实例 jsf 2.0
【发布时间】:2011-07-28 05:35:15
【问题描述】:

我的 jsf 应用程序被设计为通过单击菜单项,相应的页面会显示在新创建的选项卡中。选项卡上显示的页面有自己的表单元素和支持 bean。 通常这工作得很好,但是当同时使用相同表单的多个实例时,找不到如何解决这种情况的方法,例如。同时打开更多“添加新员工”选项卡。 我尝试使用 @SessionScoped 托管 bean 和 Map 包含表单数据的实例(为简单起见,目前只有一个字符串),如下所示:

@ManagedBean(name="employeeBean")
@SessionScoped
public class EmployeeBean extends BaseManagedBean implements Serializable{

    private Map<String, String> fields = new HashMap<String, String>();

    private String formId;

    public void newForm(){
        this.formId=RandomStringUtils.randomAlphabetic(10);
        logger.debug("newForm: formId: " + formId);
        this.fields.put(formId, new String());
}
//... etc
}

当我点击一个菜单项时,会生成一个新的随机 formId,并将新的表单数据持有者添加到 fields 映射中。

jsf页面是这样的:

<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:fn="http://java.sun.com/jsp/jstl/functions"
xmlns:p="http://primefaces.prime.com.tr/ui">

<div class="dataContainer clearfix">
<h:form id = "#{employeeBean.formId}">
    <h:inputText id="empField1" value="#{employeeBean.fields[employeeBean.formId]}" />
    <p:commandLink action="#{employeeBean.action}" value="Action" id="actionLink">
    </p:commandLink>
</h:form>
</div>  
</html>

最后打开的选项卡实例可以正常工作,但旧的不能。如果在旧选项卡上按下commandLink,则提交正确的表单并在恢复视图阶段调用一次getFormId 方法,但在我的EmployeeBean 中没有调用任何其他方法。 如果我使用固定的 formId 而不是随机的#{employeebean.formId},那么总是提交第一个打开的选项卡的数据。 (页面上具有相同 id 的多个表单)。

我想我的组件树有问题。 我正在使用PrimefacesTabView 组件(基于jquery),我在jquery javascript 函数中将新标签添加到标签组件。

谁能告诉我我做错了什么?或提出更好的方法来解决问题?处理这种情况的正确方法是什么?

非常感谢

【问题讨论】:

  • 可能不是最好的解决方案,但我设法提交了我的所有标签。诀窍是我对所有表单使用相同的 id,我用我自己的 AjaxRequest 替换了PrimeFaces.ajax.AjaxRequest,它总是发布当前表单(按下CommandLink)而不是第一个。

标签: jsf jsf-2 facelets primefaces


【解决方案1】:

你需要一个会话范围的bean吗?例如。您想从其他页面访问 bean-content 吗?如果没有,那么也许您可以简单地将您的 EmployeeBean 请求限定为范围。比你在employeeBean 中不需要地图,你valuebindings 也可以更简单...

【讨论】:

    猜你喜欢
    • 2011-09-11
    • 1970-01-01
    • 2013-07-15
    • 2015-08-26
    • 1970-01-01
    • 2012-09-30
    • 1970-01-01
    • 1970-01-01
    • 2011-01-11
    相关资源
    最近更新 更多