coldfusionmodel-glue

In modelglue event use different view files based on conditions/results


Following is a event handler used in a xml file in config folder.

<event-handler name="survey.completioninf">
    <broadcasts>
        <message name="checkLogin">
            <argument name="role" value="suadmin,manager" />
        </message>
        <message name="getPrograms" />
    </broadcasts> 
    <results>
        <result name="NotLoggedIn" do="user.login" redirect="true" />
        <result name="NotAuthorized" do="user.notauthorized" redirect="true" />
        <result do="view.template" />
    </results>
    <views>
        <include name="body" template="survey/completioninf.cfm" />
    </views>
</event-handler>

Is there any way I can include a different view file based on a result value or attribute?

I need to keep the event name consistent.


Solution

  • You can create a new result for each include you need (based on result value or attribute). If you set redirect="false" then it will stay under your survey.completioninf event name. Basically this event becomes a filter and redirects to the appropriate include silently.

    <event-handler name="survey.completioninf">
        <broadcasts>
            <message name="checkLogin">
                <argument name="role" value="suadmin,manager" />
            </message>
            <message name="getPrograms" />
        </broadcasts> 
        <results>
            <result name="NotLoggedIn" do="user.login" redirect="true" />
            <result name="NotAuthorized" do="user.notauthorized" redirect="true" />
            <!-- Add your new results here and redirect to the desired events -->
            <result name="SurveyIsNotComplete" do="survey.ContinueSurvey" redirect="false">
            <result name="SurveyIsComplete" do="survey.CompletedSurvey" redirect="false">
        </results>
    </event-handler>
    
    <!-- You will need to create new events to handle these results -->
    <event-handler name="survey.CompletedSurvey">
        <broadcasts>
            <message name="checkLogin">
                <argument name="role" value="suadmin,manager" />
            </message>
            <message name="getPrograms" />
        </broadcasts> 
        <results>
            <result name="NotLoggedIn" do="user.login" redirect="true" />
            <result name="NotAuthorized" do="user.notauthorized" redirect="true" />
            <result do="view.template" />
        </results>
        <views>
            <include name="body" template="survey/completioninf.cfm" />
        </views>
    </event-handler>
    
    <event-handler name="survey.ContinueSurvey">
        <broadcasts>
            <message name="checkLogin">
                <argument name="role" value="suadmin,manager" />
            </message>
            <message name="getPrograms" />
        </broadcasts> 
        <results>
            <result name="NotLoggedIn" do="user.login" redirect="true" />
            <result name="NotAuthorized" do="user.notauthorized" redirect="true" />
            <result do="view.template" />
        </results>
        <views>
            <include name="body" template="survey/continueSurvey.cfm" />
        </views>
    </event-handler>