JSF - criar uma página de confirmação genérico (navegação dinâmica)

StackOverflow https://stackoverflow.com/questions/1908644

  •  19-09-2019
  •  | 
  •  

Pergunta

Eu vou tentar explicar o meu problema. Eu uso a implementação JSF 1.2 do IBM em um ambiente muito, muito rígida (camada empresa, e restrições estritas -não adicionar biblioteca etc .-).

Eu quero criar uma página simples para a confirmação que pode ser reutilizado (espécie de genérico). Por exemplo : 1-Page1.jsp> clique no botão 2-pageConfirmation.jsp> 2 botões Sim ou Não 3 clique em Não> voltar / 3bis clique em Sim> ir para someAction depois ir para Page2.jsp

Então, eu queria store em sessão as coisas que eu preciso, de onde eu venho, onde eu quero ir. Mas aqui está o problema: Como posso invocar a ação que eu quero? O nome é dinâmico. Vamos supor que eu estou no controle depois que eu clicar em "Sim", eu quero chamar o "myMethodAction" de seu nome que eu armazenados na sessão. Eu pensei sobre avaliá-lo usando a api-linguagem de expressão, mas eu estou bloqueado porque não consigo acessar o ELContext, e não estou autorizado a usar o pacote el (el-api.jar).

Para resumir-up, após o clique, eu estou tentando chamar uma ação / método e, em seguida, redirecionar para uma página, em vez de chamar uma página.

Do alguém tem algumas idéias mágicas? Ou eu sou apenas totalmente errado?

Agradecemos antecipadamente.

Foi útil?

Solução

Você pode criar um ConfirmationBean managed bean totalmente independente e colocá-lo no âmbito do pedido. Você pode acessá-lo no bean "pai" por debaixo de cada gerenciado instalação de injecção propriedade ou apenas criá-lo e colocá-lo no pedido mapa.

A primeira maneira requer muito trabalho na faces-config.xml se você quiser associá-lo com muito de outros feijões, então eu não acho que isso é muito atraente.

A segunda maneira exige apenas um pouco de código (reutilizáveis) no método de ação. Vou dar um exemplo:

public String submit() {
    ConfirmationBean conformationBean = new ConfirmationBean();
    confirmationBean.setOutcome("outcome"); // Set navigation case outcome where it should return back.
    FacesContext.getCurrentInstance().getExternalContext().getRequestMap().put("confirmationBean", confirmationBean);
    return "confirm";
}

eo confirm.jsf deve ter o "resultado" em um campo oculto, por exemplo.

<h:selectBooleanCheckbox value="#{confirmationBean.confirm}" />
<h:inputHidden value="#{confirmationBean.outcome}" />
<h:commandButton value="confirm" action="#{confirmationBean.submit}" />

o método de ConfirmationBean ação deve ser parecido:

public String submit() {
    if (confirm) {
        return outcome;
    } else {
        return "confirm";
    }
}

ou se você é um fã de operadores ternários;)

public String submit() {
    return confirm ? outcome : "confirm";
}

Outras dicas

Então, eu venho com duas opções: - Override a gestão de navegação do JSF como esta solução para permitir EL na tag-to view-id

(próxima solução na próxima mensagem, limitado porque eu sou novo no stackoverflow)

Segundo solução: -Call a ação (string armazenado no confirmationBean em sessão) invocando EL como esta solução

Isso poderia ser útil para algumas pessoas aqui, mas indisponíveis para mim como eu não estou autorizado a bibliotecas de importação (el-API).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top