【问题标题】:Submit popup panel content, rich:popupPanel提交弹出面板内容,rich:popupPanel
【发布时间】:2011-10-24 19:55:45
【问题描述】:

我正在尝试在另一个具有提交/操作事件的面板内的弹出面板中提交值。但是在打开弹出面板之前,我需要在我的托管 bean 上调用一个函数来创建一个新的实体对象。外部面板只有 h:form,因为您不能嵌套它们。我已将弹出面板包装在 a4j:region 中,以便在用户提交弹出面板内的值时仅提交此部分。这有效,但不是执行弹出面板时需要调用的准备函数。我试过 a4j:commandLink 但该组件不能与 rich:popupPanel 一起使用(奇怪,因为它们都是 Richfaces 组件?!)。所以我必须中继 h:commandLink 并使用 ajax。

当打开/呈现弹出面板的链接触发时,如何在托管 bean 上调用函数?

(正确的模式是什么?)

PS。最初的问题已经改变,但在弹出面板中提交值的问题没有改变。

部分xhtml文件:

<h.form>
...
<a4j:region>
      <rich:popupPanel id="popup_sys_user_req" modal="false" autosized="true" resizeable="false">
                        <f:facet name="header">
                            <h:outputText value="Request New Sector/Category" />
                        </f:facet>
                        <f:facet name="controls">
                            <h:outputLink value="#"
                                          onclick="#{rich:component('popup_sys_user_req')}.hide(); return false;">
                                X
                            </h:outputLink>
                        </f:facet>
                        <h:panelGrid columns="2">
                            <h:outputLabel value="Request New:" />
                            <h:selectOneMenu id="sys_req_type" value="#{userController.selectedSysUserRequest.sysrequesttype}" required="true" >
                                <f:selectItems value="#{userController.getSysRequestTypeItems('SECTOR_CATEGORY')}">
                                </f:selectItems>
                            </h:selectOneMenu>
                            <h:outputLabel value="Description:" />
                            <h:inputTextarea id="user_req_desc" value="#{userController.selectedSysUserRequest.description(desc)}" required="true" requiredMessage="Decription is missing" />
                        </h:panelGrid>
                        <a4j:commandButton action="#{userController.CreateSysUserRequest()}" value="Send Request" execute="sys_user_req_form" oncomplete="#{rich:component('popup_sys_user_req')}.hide(); return false;"/>
                    </rich:popupPanel>
                </a4j:region>
</h:form>

commandLink(重新编辑

<h:commandLink actionListener="#{userController.prepareCreateSysRequest}" value="Request New Sector/Category">    
    <f:ajax  execute="popup_sys_user_req @this" render="popup_sys_user_req">
        <rich:componentControl id="popup_ctr" event="click" target="popup_sys_user_req" operation="show"/>
    </f:ajax>                                
</h:commandLink>
----------------------------
//Managed Bean:
public void prepareCreateSysRequest(ActionEvent event ) {
    selectedSysUserRequest = new Sysuserrequest();
    JsfUtil.log("Prepare Create System User Request");
}

This post continues the dicussion 关于弹出面板。 问候克里斯。

【问题讨论】:

    标签: jsf jakarta-ee richfaces


    【解决方案1】:

    如果我理解正确,当您调用 someAction1 时,您希望在 popupPanel 内而不是在面板外提交所有表单元素?我可以想到两种方法来做到这一点: 1.a4jcommandButton有一个limitToList属性,可以列出服务器上要更新哪些组件 2. 在第一个表单之外创建你的 popupPanel,然后使用它自己的表单:

    <h:form>
    ...
    <a4j:commandButton action="someAction2"...
    </h:form>
    
    <rich:popupPanel>
    <h:form>
    ...
    <a4j:commandButton action="someAction1"...
    </h:form>
    </rich:popupPanel>
    

    更新 如果您使用的是 RichFaces 4,则可以将 limitToList 属性替换为 limitRender

    【讨论】:

    • 我使用的是richfaces 4,命令按钮没有limitToList。认为这就是为什么有区域,但不确定。将尝试第二个建议。谢谢。
    • 一个后续问题,我尝试使用 execute=@form 来限制处理。页面上的第二个表单,但它似乎也尝试提交另一个表单。富裕:区域是要走的路吗?
    • 当我将弹出面板移动到自己的表单中时,弹出面板的标题消失了。我猜 JSF 不适合弱者?!
    • 剩下的唯一问题是从操作中调用 prepareCreate()。我在 action="" 中引用的函数将不会执行。我尝试了 a4j:commandLink 但弹出面板没有显示。怎么办?
    • 当您说您以自己的形式移动了 popupPanel 时,您可以发布您的代码吗?您可以尝试在 popupPanel 中添加表单而不是在表单中添加 popupPanel 吗?你定义了 吗?
    【解决方案2】:

    问题在于弹出窗口不是 jsf 中表单的子项,您只需要使用 domElementAttachment 属性来更改它。所以你的代码看起来像这样:

        <h.form>
    ...
    <a4j:region>
          <rich:popupPanel id="popup_sys_user_req" modal="false" autosized="true" resizeable="false" domElementAttachment="form">
          <f:facet name="header">
    ...
    

    【讨论】:

      猜你喜欢
      • 2011-10-27
      • 2013-12-21
      • 1970-01-01
      • 2016-02-04
      • 1970-01-01
      • 1970-01-01
      • 2023-04-10
      • 1970-01-01
      • 2012-04-02
      相关资源
      最近更新 更多