2013-08-28 6 views
0

Скажем, у меня есть кнопка:Перенаправление методом в пластах

<h:commandButton value="Assign task" action="#{taskAssigner.assignTo(user)}"/> 

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

<s:link value="#{task.description}" action="#{workOnTask.start}"> 
    <f:param name="taskId" value="#{task.id}" /> 
</s:link> 

при условии, что в WEB-INF/pages.xml У меня есть что-то вроде

<page view-id="/task-list.xhtml"> 
    <navigation from-action="#{workOnTask.start}"> 
     <redirect view-id="/task.xhtml"/> 
    </navigation> 
</page> 

Я не вижу, как это сделать на Java в TaskAssigner.assignTo(). Мне нужен доступ к компоненту Seam, не так ли? Мне нужно перенаправить на /task.xhtml и установить параметр taskId по мере необходимости, а также запустить workOnTask.start(), который выполняет некоторую инициализацию на компоненте.

ответ

1

Во-первых, не рекомендуется использовать s:link -tag вместе с атрибутом action (см. JBoss Forum).

Для выдачи навигационной я бы заменить (или объединить) from-action тег с if-outcome один и вернуть значение за if-outcome на assignTo - и workOnTask.start -методов.

<page view-id="/task-list.xhtml"> 
    <navigation> 
    <rule if-outcome="navToTask"> 
     <redirect view-id="/task.xhtml"/> 
    </rule> 
    </navigation> 
</page> 

И в методе:

public String assignTo(User u) 
{ 
    [...] 
    // in case of success 
    return "navToTask"; 
} 
+0

Но как я подключить это 'workOnTask.start'? Есть ли способ вызвать его из 'assignTo()'? Это главная проблема. WorkOnTask имеет '@RequestParameter Long taskId' и' WorkOnTask.start() 'использует этот параметр. – janek37

+0

Я полагаю, что установка параметра запроса для следующего запроса непосредственно в методе assignTo невозможна. Но если вам нужен параметр-запрос для передачи идентификатора задачи, одним из способов было бы установить его в навигационном правиле: ваш компонент 'taskAssigner' уже имеет доступ к задаче - возможно, вы вставляете его туда. Поэтому вы также можете использовать его в правиле навигации: '' – MrD

+0

Хорошо, но как я могу убедиться, что 'task' доступен from pages.xml? Объект создается в методе 'assignTo'. – janek37

 Смежные вопросы

  • Нет связанных вопросов^_^