如何重用(jsf)richfaces模态面板对话框?

时间:2011-08-20 08:40:01

标签: jsf

在我的应用程序中,我使用Facelets上的RichFaces 3.3模式面板实现了员工搜索功能。我试图在我的应用程序中重复使用它,所以我在facelet-taglib_1_0.xml

中添加了以下代码
<tag>
    <tag-name>employeeSearch</tag-name>
    <source>employee-search.xhtml</source>
</tag>

xhtml页面包含以下组件

  1. 搜索输入字段
  2. 搜索按钮
  3. result datatable
  4. 我还映射了一个支持bean。

    我的问题是我无法从搜索输入字段中获取值

    我想知道上面给出的方法是否正确,或者是否有更好的方法?


    感谢您的回复Arjan ...我试过但结果没有绑定在结果数据表列表中。我的代码在这里。

    EmployeeSearchBean是请求范围。

    调用可重复使用的标记代码:

    <foo:employeeSearch orgSearchId="empHistSearch" bean="#{EmployeeSearchBean}" action="findEmployee" renderedVal="#{empHist.editable}" />
    

    模型面板代码:

    <a4j:jsFunction name="submit" action="#{bean[action]}" />
    
        <rich:modalPanel id="orgUnitSearchPanel_empHistSearch" autosized="true" width="450">
                <f:facet name="header">
                    <h:outputText value="#{messages.mepit_OE_Search}" />
                </f:facet>
                <f:facet name="controls">
                    <h:panelGroup>
                        <h:graphicImage value="/pics/buttons/fenster_schliessen.gif" id="hideOrgUnitSearchPanel_#{orgSearchId}" styleClass="hidelink" />
                        <rich:componentControl for="orgUnitSearchPanel_#{orgSearchId}" attachTo="hideOrgUnitSearchPanel_#{orgSearchId}" operation="hide" event="onclick" />
                    </h:panelGroup>
                </f:facet>
    <table class="dispinputTable" cellspacing="2" cellpadding="0">
        <tr>
            <td style="width: 75px;">
                <h:outputText value="#{messages.mepit_OE}" />                   
            </td>
            <td>
                <h:inputText id="empHist_oeExecutingName" value="#{EmployeeSearchBean.empSearchCriteria}" styleClass="text" size="60" />
            </td>
            <td>
                <a4j:commandButton styleClass="mepitButtons" onclick="submit();" value="#{dbMessages.db_search}" title="#{dbMessages.db_search}" reRender="orgUnitDT#{orgSearchId}" />
            </td>
        </tr>
        <tr>
            <td colspan="3" >                       
                <rich:extendedDataTable  width="425px" height="150px"
                    id="orgUnitDT#{orgSearchId}" cellspacing="0" cellpadding="0" border="0"
                    styleClass="inhalt" var="oeLst" value="#{EmployeeSearchBean.employeeList}" rowClasses="row0, row1">
                    <rich:column width="370px;" align="left">
                        <f:facet name="header">
                            <h:outputText value="#{messages.mepit_OE}" />
                        </f:facet>
                        <h:outputText id="empHist_OE" value="#{oeLst.name}" />
                    </rich:column>
                    <rich:column width="55px;">
                        <f:facet name="header">
                            <h:outputText value="#{messages.mepit_select}" />
                        </f:facet>
                        <h:commandLink value="" styleClass="edit">
                            <f:setPropertyActionListener value="#{oeLst}" target="#{SkillPM.executingOrgUnit}" reRender="empHist_orgUnit" />
                        </h:commandLink>
                        <h:commandLink styleClass="edit" onclick="#{rich:component(mepit:concat(orgSearchId,'orgUnitSearchPanel'))}.hide(); submit(); return false;" />
                    </rich:column>                          
                </rich:extendedDataTable >                                              
            </td>
        </tr>                           
    </table>
    </rich:modalPanel>
    

1 个答案:

答案 0 :(得分:0)

立即开放以改进的一件事是,您不应该将自己的标签添加到标准facelets taglib文件中。保留该文件并创建自己的文件。

如果您将值绑定传递给您的代码,并将搜索输入字段绑定到此代码,那么它应该有效:

<foo:employeeSearch myValue="#{yourBackingBean.someValue}"/>

然后在employee-search.xhtml

<h:inputText value="#{myValue}" />

可以使用其他名称代替myValue。关键是您在自定义标记上使用的属性名称应与输入文本组件绑定的属性名称相匹配。