Skip to Main Content

Java Development Tools

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

Update ViewAttribute Properties at runtime - Multiple regions of same Task Flow Issue

santiago_ncJul 9 2014 — edited Jul 14 2014

I have create a very short program to try explain my current issue.

1) The taskflow has as first method a client method exposed from the Application Module. This is its code:

    public void setDepartmentNameLabel(String label) {      

        ViewObjectImpl vo = this.getDepartments();

        ViewDefImpl viewDef = (ViewDefImpl) vo.getDef();

        String atribName = "DepartmentName";

        int indexAttr = viewDef.getAttributeIndexOf(atribName);

        if (indexAttr != -1) {

            AttributeDefImpl attr = (AttributeDefImpl)viewDef.getAttributeDef(indexAttr);

            if (attr != null) {//Set Label Name

                attr.setProperty(AttributeHints.ATTRIBUTE_LABEL, label);

            }

        }      

    }

2) TaskFlow has a "label" parameter which is passing to previuos method

#{pageFlowScope.label}

3) View Object departments is rendered as Adf Form in a pageFragment which is exposed in the taskFlow after the client method.

4) It has created multiple regions from this TaskFlow in a page, each one with different values for task flow label parameter.

When I run this application, the same label is shared for all regions. I have tried whit Shared and Isolated modes for TaskFlow.

I suposse that in isolated mode, each region would have their own instances for ApplicationModules and ViewObjects.

PS: This is only a test sample. In real application It is modifing all UI Hints for ViewObject and It is updating its query too, then I Know that I could change the label in a managed bean but this is not the requirement.

Jdeveloper 12c (12.1.2.0) ADF12c.

If it is necessary, I could attatch application in a zip file.

Fragment departemenst.jsff Code:

<?xml version='1.0' encoding='UTF-8'?>

<ui:composition xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:af="http://xmlns.oracle.com/adf/faces/rich"

                xmlns:f="http://java.sun.com/jsf/core">

    <af:panelHeader text="Department" id="ph1">

        <f:facet name="context"/>

        <f:facet name="menuBar"/>

        <f:facet name="toolbar"/>

        <f:facet name="legend"/>

        <f:facet name="info"/>

        <af:panelFormLayout id="pfl1">

            <af:inputText value="#{bindings.DepartmentId.inputValue}" label="#{bindings.DepartmentId.hints.label}"

                          required="#{bindings.DepartmentId.hints.mandatory}"

                          columns="#{bindings.DepartmentId.hints.displayWidth}"

                          maximumLength="#{bindings.DepartmentId.hints.precision}"

                          shortDesc="#{bindings.DepartmentId.hints.tooltip}" id="it1">

                <f:validator binding="#{bindings.DepartmentId.validator}"/>

                <af:convertNumber groupingUsed="false" pattern="#{bindings.DepartmentId.format}"/>

            </af:inputText>

            <af:inputText value="#{bindings.DepartmentName.inputValue}" label="#{bindings.DepartmentName.hints.label}"

                          required="#{bindings.DepartmentName.hints.mandatory}"

                          columns="#{bindings.DepartmentName.hints.displayWidth}"

                          maximumLength="#{bindings.DepartmentName.hints.precision}"

                          shortDesc="#{bindings.DepartmentName.hints.tooltip}" id="it2">

                <f:validator binding="#{bindings.DepartmentName.validator}"/>

            </af:inputText>

            <af:inputText value="#{bindings.LocationId.inputValue}" label="#{bindings.LocationId.hints.label}"

                          required="#{bindings.LocationId.hints.mandatory}"

                          columns="#{bindings.LocationId.hints.displayWidth}"

                          maximumLength="#{bindings.LocationId.hints.precision}"

                          shortDesc="#{bindings.LocationId.hints.tooltip}" id="it3">

                <f:validator binding="#{bindings.LocationId.validator}"/>

                <af:convertNumber groupingUsed="false" pattern="#{bindings.LocationId.format}"/>

            </af:inputText>

            <af:inputText value="#{bindings.ManagerId.inputValue}" label="#{bindings.ManagerId.hints.label}"

                          required="#{bindings.ManagerId.hints.mandatory}"

                          columns="#{bindings.ManagerId.hints.displayWidth}"

                          maximumLength="#{bindings.ManagerId.hints.precision}"

                          shortDesc="#{bindings.ManagerId.hints.tooltip}" id="it4">

                <f:validator binding="#{bindings.ManagerId.validator}"/>

                <af:convertNumber groupingUsed="false" pattern="#{bindings.ManagerId.format}"/>

            </af:inputText>

            <f:facet name="footer">

                <af:panelGroupLayout layout="horizontal" id="pgl1">

                    <af:button actionListener="#{bindings.First.execute}" text="First"

                               disabled="#{!bindings.First.enabled}" partialSubmit="true" id="b1"/>

                    <af:button actionListener="#{bindings.Previous.execute}" text="Previous"

                               disabled="#{!bindings.Previous.enabled}" partialSubmit="true" id="b2"/>

                    <af:button actionListener="#{bindings.Next.execute}" text="Next"

                               disabled="#{!bindings.Next.enabled}" partialSubmit="true" id="b3"/>

                    <af:button actionListener="#{bindings.Last.execute}" text="Last"

                               disabled="#{!bindings.Last.enabled}" partialSubmit="true" id="b4"/>

                    <af:spacer width="10" height="10" id="s1"/>

                    <af:button actionListener="#{bindings.CreateInsert.execute}" text="CreateInsert"

                               disabled="#{!bindings.CreateInsert.enabled}" id="b5"/>

                    <af:button actionListener="#{bindings.Delete.execute}" text="Delete"

                               disabled="#{!bindings.Delete.enabled}" id="b6" immediate="true"/>

                    <af:spacer width="10" height="10" id="s2"/>

                    <af:button actionListener="#{bindings.Commit.execute}" text="Commit"

                               disabled="#{!bindings.Commit.enabled}" id="b7"/>

                    <af:button actionListener="#{bindings.Rollback.execute}" text="Rollback"

                               disabled="#{!bindings.Rollback.enabled}" immediate="true" id="b8">

                        <af:resetActionListener/>

                    </af:button>

                </af:panelGroupLayout>

            </f:facet>

        </af:panelFormLayout>

    </af:panelHeader>

</ui:composition>

Page Def fragment code:

<?xml version="1.0" encoding="UTF-8" ?>

<pageDefinition xmlns="http://xmlns.oracle.com/adfm/uimodel" version="12.1.2.66.68" id="departmentsPageDef"

                Package="fragments">

  <parameters/>

  <executables>

    <variableIterator id="variables"/>

    <iterator Binds="Departments" RangeSize="25" DataControl="TestAppModuleDataControl" id="DepartmentsIterator"

              ChangeEventPolicy="ppr"/>

  </executables>

  <bindings>

    <attributeValues IterBinding="DepartmentsIterator" id="DepartmentId">

      <AttrNames>

        <Item Value="DepartmentId"/>

      </AttrNames>

    </attributeValues>

    <attributeValues IterBinding="DepartmentsIterator" id="DepartmentName">

      <AttrNames>

        <Item Value="DepartmentName"/>

      </AttrNames>

    </attributeValues>

    <attributeValues IterBinding="DepartmentsIterator" id="LocationId">

      <AttrNames>

        <Item Value="LocationId"/>

      </AttrNames>

    </attributeValues>

    <attributeValues IterBinding="DepartmentsIterator" id="ManagerId">

      <AttrNames>

        <Item Value="ManagerId"/>

      </AttrNames>

    </attributeValues>

    <action IterBinding="DepartmentsIterator" id="First" RequiresUpdateModel="true" Action="first"/>

    <action IterBinding="DepartmentsIterator" id="Previous" RequiresUpdateModel="true" Action="previous"/>

    <action IterBinding="DepartmentsIterator" id="Next" RequiresUpdateModel="true" Action="next"/>

    <action IterBinding="DepartmentsIterator" id="Last" RequiresUpdateModel="true" Action="last"/>

    <action IterBinding="DepartmentsIterator" id="CreateInsert" RequiresUpdateModel="true" Action="createInsertRow"/>

    <action IterBinding="DepartmentsIterator" id="Delete" RequiresUpdateModel="false" Action="removeCurrentRow"/>

    <action id="Commit" RequiresUpdateModel="true" Action="commitTransaction" DataControl="TestAppModuleDataControl"/>

    <action id="Rollback" RequiresUpdateModel="false" Action="rollbackTransaction"

            DataControl="TestAppModuleDataControl"/>

  </bindings>

</pageDefinition>

TaskFlow Code:

<?xml version="1.0" encoding="UTF-8" ?>

<adfc-config xmlns="http://xmlns.oracle.com/adf/controller" version="1.2">

  <task-flow-definition id="TestTaskFlow">

    <default-activity>setDepartmentNameLabel</default-activity>

    <transaction>

      <requires-transaction/>

    </transaction>

    <data-control-scope>

      <isolated/>

    </data-control-scope>

    <input-parameter-definition id="__1">

      <name>label</name>

      <value>#{pageFlowScope.label}</value>

      <class>java.lang.String</class>

      <required/>

    </input-parameter-definition>

    <method-call id="setDepartmentNameLabel">

      <method>#{bindings.setDepartmentNameLabel.execute}</method>

      <outcome>

        <fixed-outcome>setDepartmentNameLabel</fixed-outcome>

      </outcome>

    </method-call>

    <view id="departments">

      <page>/fragments/departments.jsff</page>

    </view>

    <control-flow-rule id="__2">

      <from-activity-id>setDepartmentNameLabel</from-activity-id>

      <control-flow-case id="__3">

        <from-outcome>setDepartmentNameLabel</from-outcome>

        <to-activity-id>departments</to-activity-id>

      </control-flow-case>

    </control-flow-rule>

    <use-page-fragments/>

  </task-flow-definition>

</adfc-config>

TaskFlow method setDepartmentNameLbel code

<?xml version="1.0" encoding="UTF-8" ?>

<pageDefinition xmlns="http://xmlns.oracle.com/adfm/uimodel" version="12.1.2.66.68"

                id="TestTaskFlow_TestTaskFlow_setDepartmentNameLabelPageDef"

                Package="com.edisa.test.view_attribute.view.pageDefs" SkipValidation="true">

  <parameters/>

  <executables/>

  <bindings>

    <methodAction id="setDepartmentNameLabel" RequiresUpdateModel="true" Action="invokeMethod"

                  MethodName="setDepartmentNameLabel" IsViewObjectMethod="false" DataControl="TestAppModuleDataControl"

                  InstanceName="data.TestAppModuleDataControl.dataProvider">

      <NamedData NDName="label" NDValue="#{pageFlowScope.label}" NDType="java.lang.String"/>

    </methodAction>

  </bindings>

</pageDefinition>

Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on Aug 11 2014
Added on Jul 9 2014
1 comment
272 views