การใช้ faces-config.xml ใน JSF 2 คืออะไร?


89

หลังจากการสนับสนุน JSF 2 ครั้งใหญ่สำหรับคำอธิบายประกอบฉันสงสัยว่าฉันจะใช้ไฟล์ faces-config.xmlเพื่ออะไร ตอนนี้ความสำคัญคืออะไร?

กล่าวอีกนัยหนึ่งคือการกำหนดค่าใดบ้างที่สามารถทำได้ผ่านfaces-config.xmlคำอธิบายประกอบเท่านั้น

ตอนนี้สิ่งที่ฉันใช้เพื่อประกาศตัวแก้ไข EL ของ Spring

<?xml version="1.0" encoding="UTF-8"?>
<faces-config
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
    version="2.0">

    <application>
        <el-resolver>
            org.springframework.web.jsf.el.SpringBeanFacesELResolver
        </el-resolver>
    </application> 
</faces-config>

1
ทำไมเราต้องระบุ ELResolver ในตัว ฉันคิดว่าปรัชญาการออกแบบเป็นแบบแผนมากกว่าการกำหนดค่า ...
masterxilo

ฉันยังไม่มี<el-resolver>ในของฉันfaces-config.xmlและมันก็ทำงานได้อย่างสมบูรณ์
Roland

คำตอบ:


142

ยังคงใช้กับหลายสิ่งที่ไม่สามารถใส่คำอธิบายประกอบได้ เช่นข้อความตรวจสอบ JSF ที่กำหนดเอง:

<application>
    <message-bundle>com.example.i18n.messages</message-bundle>
</application>

บันเดิล i18n ส่วนกลาง (คุณจึงไม่จำเป็นต้องประกาศ<f:loadBundle>ในทุกมุมมอง):

<application>
    <resource-bundle>
        <base-name>com.example.i18n.Text</base-name>
        <var>text</var>
    </resource-bundle>
</application>

โลแคล i18n ที่สนับสนุนอย่างชัดเจน (เพื่อที่จะไม่สนใจสิ่งที่ไม่ได้ประกาศแม้ว่าจะมีบันเดิลข้อความหรือบันเดิลรีซอร์สก็ตาม):

<application>
    <locale-config>
        <default-locale>en</default-locale>
        <supported-locale>nl</supported-locale>
        <supported-locale>es</supported-locale>         
        <supported-locale>de</supported-locale>         
    </locale-config>
</application>

ตัวจัดการมุมมองแบบกำหนดเอง:

<application>
    <view-handler>com.example.SomeViewHandler</view-handler>
</application>

ผู้ฟังเฟส (ยังไม่มีคำอธิบายประกอบ):

<lifecycle>
    <phase-listener>com.example.SomePhaseListener</phase-listener>
</lifecycle>

ถั่วที่มีการจัดการที่ไม่สามารถข้อเขียน (ด้านล่างหนึ่งให้ปัจจุบันDateบน#{now}):

<managed-bean>
    <description>Current date and time</description>
    <managed-bean-name>now</managed-bean-name>
    <managed-bean-class>java.util.Date</managed-bean-class>
    <managed-bean-scope>request</managed-bean-scope>
</managed-bean>

โรงงานที่กำหนดเองเช่นโรงงานยกเว้นที่กำหนดเองจัดการ (มันยังช่วยให้โรงงานFacesContext, ExternalContext, LifeCycleและอื่น ๆ อีกมากมายเพื่อให้คุณสามารถให้ดำเนินการเองของคุณ):

<factory>
    <exception-handler-factory>com.example.SomeExceptionHandlerFactory</exception-handler-factory>
</factory>

เพื่อตั้งชื่อเฉพาะที่ใช้กันทั่วไป หากคุณมีการfaces-config.xmlเติมแท็กอัตโนมัติใน IDE ของคุณคุณสามารถค้นหาได้ทั้งหมด ไม่จำเป็นต้องใช้เฉพาะ bean ที่มีการจัดการตัวตรวจสอบตัวแปลงส่วนประกอบตัวแสดงผลและกรณีการนำทางแบบจุดต่อจุดเท่านั้นไม่จำเป็นต้องใช้อีกต่อไปเนื่องจากคำอธิบายประกอบใหม่และการนำทางโดยนัย


7
@ Matt: ผมเคยมีโครงการที่java.util.HashMapเป็น#{components}ที่เก็บอยู่ในขอบเขตการร้องขอไปยังมีภาพรวมที่ดีขึ้นของการเปิดเผยผูกองค์ประกอบทั้งหมด เช่นbinding="#{components.foo}"เพื่อที่จะสามารถนำมาอ้างอิงเป็น#{components.foo}ซึ่งเป็นตัวเองมากขึ้นการจัดเก็บเอกสารและมีความเสี่ยงน้อยลง (เนื่องจากการปะทะกันชื่อที่มีศักยภาพกว่า) และbinding="#{foo}" #{foo}
BalusC

2
ฉันยังมองหาคำอธิบายประกอบสำหรับระบุ el-resolver ตอนนี้ฉันคิดว่าไม่มีวิธีระบุคุณสมบัติของแอปพลิเคชันเหล่านี้ผ่านคำอธิบายประกอบ .. ขวา .. ??
Rup Majumder

@RupMajumder คุณต้องการใส่คำอธิบายประกอบตรงไหนฉันหมายถึงคลาสอะไร คุณสมบัตินี้กระจายอยู่ในแอปพลิเคชันทั้งหมด
iozee

1
FWIW เมื่อใช้ Apache Deltaspike คำอธิบายประกอบ JsfPhaseListener สามารถใช้สำหรับการใช้ตัวรับฟังเฟสโดยไม่จำเป็นต้องกำหนดค่าใน faces-config.xml
jpangamarca
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.