Após usar a viewAction toda vez que eu quiser acessar meu projeto pela url vou ter que usar o sufixo ?autorId=
?
Porque quando tento acessar sem passar o id da um erro dizendo que um id é necessário.
Após usar a viewAction toda vez que eu quiser acessar meu projeto pela url vou ter que usar o sufixo ?autorId=
?
Porque quando tento acessar sem passar o id da um erro dizendo que um id é necessário.
Fala Eduardo, tudo bem ?
Então .. o id que você passa precisa ser usado justamente pra conseguir acessar as informações do seu autor. Pra consegui trazer os dados pra sua página o id é necessário. Mas não necessariamente você precisa disso pra todo o projeto. Pode ter outras páginas que são acessadas e que não precisem que você envie qualquer dado, como um id.
Esperto ter ajudado. Abraço!
E ai Rafael, A questão é, toda vez que vou acessar a página autor.xhtml devo passar um id no url, caso contrário é lançado essa exceção. Fiz o seguinte, retirei do xhtml a viewAction pra poder acessar a página sem passar qualquer parâmetro. Porém não queria ter que fazer isso toda vez que acessar a página. Abs.
Fala Eduardo, tudo bem ?
Bom, não muito jeito mesmo. A viewAction é usada em geral pra justamente pra rodar alguma checagem de algo que vem da view. Como demonstrado no exemplo nesse doc: http://www.oracle.com/technetwork/articles/java/jsf22-1377252.html ...
<f:metadata>
<f:viewParam id="id" name="item" value="#{catalog.item}"/>
<f:viewAction action="#{catalog.checkItem}"/>
</f:metadata>
Note: The viewAction component must be declared as a child of a metadata facet. This allows the view action to be part of the JavaServer Faces lifecycle for both non-faces and faces requests. If you put it anywhere else in the page, the behavior is undefined.
Notice that the view action calls a validation method (checkItem) of the bean, eliminating the need for a Validator class ...:
@Named
@RequestScoped
public class Catalog implements Serializable {
private Integer item;
private FacesContext facesContext;
@Inject private ValidItemRange range; // An ApplicationScoped Bean
// the declares a high and low int
@PostConstruct
public void postConstruct() {
facesContext = FacesContext.getCurrentInstance();
}
public String checkItem() {
if (item.intValue() >= range.getLow() &&
item.intValue() <= range.getHigh()) {
return null;
}
facesContext.addMessage(null,
new FacesMessage("The item number you entered is invalid."));
return "index";
}
// ... other getter and setter methods
}
O que você pode fazer é tentar planejar uma lógica suplementar pra evitar a exception, mas se realmente você não deseja que sempre lhe seja forçada a passagem do parâmetro, creio que não usar o recurso.
Abraço!
E ai Rafael, tudo ótimo. O problema já foi resolvido, era o if na viewAction.
<f:viewAction action="#{autorBean.carregarAutorPeloId}"
if="#{param['autorId'] != null}" />
Meu if estava diferente.