2011-07-15 2 views
0

У меня есть простая JSF-страница и вы хотите передать параметр со страницы 1 на страницу2. Каждая страница имеет свой собственный контроллер, который находится в области запроса.Как передать параметры между контроллерами с запросом?

Два контроллера выглядеть следующим образом: Controller1:

@Component("requestController1") 
@Scope("request") 
public class RequestController1 { 

private List<Product> products; 
private Product selectedProduct; 

@PostConstruct 
public void init() { 
     //load products from db 
} 

public void setProducts(List<Product> products) { 
    this.products = products; 
} 

public List<Product> getProducts() { 
    return products; 
} 

public void setSelectedProduct(Product selectedProduct) { 
    this.selectedProduct = selectedProduct; 
} 

public Product getSelectedProduct() { 
    return selectedProduct; 
} 

Controller2:

@Component("requestController2") 
@Scope("request") 
public class RequestController2 { 

private Long selectedProductId; 

    @PostConstruct 
public void init() { 
selectedProductId = (Long) FacesContext.getCurrentInstance().getExternalContext().getRequestMap().get("selectedProductId"); 
} 

    public void setSelectedProductId(Long selectedProductId) { 
    this.selectedProductId = selectedProductId; 
} 

public Long getSelectedProductId() { 
    return selectedProductId; 
} 
} 

Теперь я хочу, чтобы перейти от page1 к PAGE2 с пропусканием selectedProductId к controller2. Обратите внимание, что оба контроллера находятся в области запроса, и я хочу использовать commandButton для навигации.

<h:commandButton value="Continue" action="requestParam2.jsf?faces-redirect=true"> 
       <f:param name="selectedProductId" value="#{requestController1.selectedProduct.id}"></f:param> 
      </h:commandButton> 

Похоже, что f: param здесь не работает. Как я могу это достичь?

ответ

0

Попробуйте это: <h:commandButton value="Continue" action="requestParam2.jsf?faces-redirect=true&selectedProductId=#{requestController1.selectedProduct.id}"/>

В JSF1 ч: CommandButton не поддерживается е: PARAM теги - если я правильно помню. Вы всегда можете использовать h:commandLink и использовать некоторые стили CSS.

Также необходимо вызвать getRequestParameterMap() для считывания параметров запроса. getRequestMap() получает записи из области запроса сервлета - не совсем то, что вы хотите.

+0

Здесь я использую JSF 2.0. Есть ли h: commandButton все еще не поддерживает f: param? – flash

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