Передача параметра из одного метода в другой - PullRequest
0 голосов
/ 18 апреля 2011

У меня довольно глупый вопрос, мне нужно передать параметр из одного метода в другой метод.У меня есть следующий метод

public String test(Employees emp)
{
   return emp.getempno();
}

Мне нужно передать emp.getempno() моему другому методу loadDetails();

Моя проблема в том, что я не могу добавить аргумент в метод loadDetails (), потому что явызов этого метода в нескольких других местах.

Как мне этого добиться?Я пытался поместить emp.getempno() в объекте Collecion, но проблема в том, что test(Employees emp) Metood не вызывается во втором методе.

Извините за мое невежество, любая помощь очень заметна.

Обновление 1

Так я присваиваю значение методу тестирования, и метод getTestValues ​​вызывается из другого класса при передаче параметра с одной страницы на другую.

public void getTestValues(List<Employees> paramList)  {
    for (Employees dataItem: paramList) {
        test(dataItem);
    }
}

Обновление 2

Это мой метод loadDetails (), в котором я получаю значения в БД и отображаю их в виде данных на странице jsf.

private void loadDetails() {

        try {

            dataDetails = anotherclass.deptDetails(passempno);
        } catch (Exception e) {
            e.printStackTrace();
            logger.error("error from loadDetails" + e.getMessage());
        }

    }

Ответы [ 3 ]

1 голос
/ 18 апреля 2011

Хорошо, я все еще пытаюсь обернуть голову вокруг этого, но я думаю, что это становится немного яснее. Для правильной работы loadDetails() необходимо знать номер сотрудника (как показано выше в passempno). У меня есть два ответа:

  1. В лучшем случае кажется, что passempno - это действительно параметр метода loadDetails(). Т.е. значение passempno является частью поведения метода. Таким образом, настоятельно предпочтительным вариантом является просто добавить номер сотрудника в качестве аргумента. Вы заявляете, что не хотите делать это, потому что другие места используют его - как другие клиенты метода используют его без указания номера сотрудника?

  2. Если это часть какого-то нетривиального состояния родительского класса, то возможно вам нужно вынести номер сотрудника в поле объекта. Это менее чем желательно, потому что оно скрывает (или, по крайней мере, делает неявным) важное состояние, необходимое для работы loadDetails().

  3. Если есть взаимодействие с сохранением состояния с резервной базой данных, и номер сотрудника здесь является частью этого состояния, я бы рекомендовал выделить состояние взаимодействия с базой данных в дочерний класс, который содержит номер сотрудника и любое другое состояние (как предложено в 2 выше).

Дайте мне знать, если это поможет; если нет ... дай мне знать, что я пропустил.

1 голос
/ 18 апреля 2011

В основном, что я пытаюсь сделать, это когда я щелкаю строку в таблице данных, я хотел бы передать первичный ключ этой строки в класс bean-компонента второй страницы, чтобы я мог заполнить таблицу данных на второй странице.

JSF 1.1 и хотел бы передать как POST GET с commandlink outputlink в виде данных.

Используйте следующее (при условии JSF 1.1):

EmployeeBacking

public class EmployeeBacking {

    private List<Employee> list;

    public EmployeeBacking() {
        list = employeeService.list();
    }

    // ...
}

employees.jsp

<h:dataTable value="#{employeeBacking.list}" var="employee">
    <h:column>
        <h:outputText value="#{employee.name}" />
    </h:column>
    <h:column>
        <h:outputLink value="departments.jsp">
            <h:outputText value="Show departments" />
            <f:param name="employeeId" value="#{employee.id}" />
        </h:outputLink>
    </h:column>
</h:dataTable>

DepartmentBacking

public class DepartmentBacking {

    private Long employeeId;
    private List<Department> list;

    private void load() {
        list = departmentService.list(employeeId);
    }

    public List<Department> getList() {
        if (list == null) load();
        return list;
    }

    // ...
}

(обратите внимание на ленивую загрузку в геттере, в JSF 1.2 для этого лучше использовать метод @PostConstruct)

departments.jsp

<h:dataTable value="#{departmentBacking.list}" var="department">
    <h:column>
        <h:outputText value="#{department.name}" />
    </h:column>
</h:dataTable>

faces-config.xml

<managed-bean>
    <managed-bean-name>employeeBacking</managed-bean-name>
    <managed-bean-class>com.example.EmployeeBacking</managed-bean-class>
    <managed-bean-scope>request</managed-bean-scope>
</managed-bean>

<managed-bean>
    <managed-bean-name>departmentBacking</managed-bean-name>
    <managed-bean-class>com.example.DepartmentBacking</managed-bean-class>
    <managed-bean-scope>request</managed-bean-scope>
    <managed-property>
        <property-name>employeeId</property-name>
        <value>#{param.employeeId}</value>
    </managed-property>
</managed-bean>

Что здесь происходит, выходная ссылка перейдет на departments.jsp с текущим идентификатором сотрудника в качестве параметра запроса, а <managed-property> в faces-config.xml установит его в резервной копии отдела, и, наконец, получатель в списке будет лениво загружать правильные отделы на основе идентификатора сотрудника.

0 голосов
/ 18 апреля 2011

Я работаю над программным обеспечением ERP для жизни.Ваш метод LoadDetails не должен принимать Employee в качестве параметра.

Я предполагаю, что loadDetails относится к классу Load, и у вас есть сотрудник, который запланировал загрузку или заполнил ее.Если это так, класс Load должен иметь ссылку на этого Employee с момента создания.

...