JSF-toepassing scoped beheerde boneninjectie

Ik ontwikkel een web-app, met jsf2, lente en winterslaap.

Ik heb een beheerde bean "application scoped" ("utilsJSF" genoemd) met JSF-gebruiksmethoden, zoals:

  • Eigenschappen van bestanden lezen om een ​​bericht van de sleutel te krijgen (met getBundle).
  • Een tekenreeks toevoegen als een gezichtsbericht om later in een weergave te zien.
  • etc

Ik injecteer deze bean in mijn "Base Controller" (als een "managed property"), zodat al mijn controllers deze uitbreiden en toegang hebben tot deze hulpprogramma's. Hier heb ik geen probleem.

Maar hoe kan ik deze hulpprogramma's van andere klassen gebruiken die geen "beheerde bonen" zijn?

Ik zal mezelf uitleggen:

Ik heb een uitzonderingshiërarchie, waarbij elke afzonderlijke uitzonderingscategorie toegang moet hebben tot een resourcebundel (eigenschappenbestand), waarbij de sleutel de naam is van de uitzondering en de waarde het bericht is dat ik aan de gebruiker ga tonen. De uitzonderingsconstructor haalt de waarde uit het bestand, slaat deze op in een veld van de uitzondering en vervolgens geeft de controller het bericht aan de gebruiker weer als een gezichtsbericht.

Ik kan het bericht van de controller weergeven met behulp van de beheerde bean "utilsJSF", omdat ik deze in de BaseController heb geïnjecteerd.

Maar ik kan "utilsJSF" niet in de uitzonderingsklasse injecteren om het te gebruiken (omdat de uitzonderingsklassen geen beheerde bonen zijn).

Wat is de beste oplossing om dit probleem op te lossen?

2

1 antwoord

U moet al deze gebruiksmethoden (die zijn (of kunnen) openbare statische ) in een echte utiliteitsklasse refactoren en deze niet in een toepassingsbottool houden.

public final class Faces {

    private Faces() {
       //Prevent construction.
    }

    public static void addGlobalInfoMessage(String summary) {
        FacesContext.getCurrentInstance().addMessage(null,
            new FacesMessage(FacesMessage.SEVERITY_INFO, summary, null));
    }

   //...
}

Op deze manier kunt u het overal gebruiken. Maak een soortgelijke voor het ontvangen van bundelberichten.

2
toegevoegd
Als de klas geen staat heeft, dan is het niet nodig om er een klasse te maken. Een boon met toepassingsbereik is echter handig om brede gegevens van toepassingen weer te geven in weergaven, zoals statische vervolgkeuzelijsten.
toegevoegd de auteur BalusC, de bron
Heel erg bedankt BalusC. Het gebruik van statische methoden was mijn eerste oplossing daarvoor en het werkt. Ik vroeg me gewoon af of er een andere manier is. In feite probeerde ik de utils-methoden in de scoped bean-toepassing te plaatsen, alleen maar omdat ik het in een website heb gelezen. Maar ik denk dat application scoped beans bedoeld zijn voor het opslaan van applicatiegegevens (constanten, statische lijsten, enz.), Niet om utility-methoden te houden, vind je niet? Bedankt, ik waardeer je heel erg en lees je web. (Sorry als mijn Engels niet zo goed is, maar ik kom uit Spanje).
toegevoegd de auteur choquero70, de bron