2015-10-05 64 views
0

XHTML文件我用viewParam:JSF viewParam没有设置

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:ui="http://java.sun.com/jsf/facelets" 
    xmlns:p="http://primefaces.org/ui" 
    xmlns:f="http://java.sun.com/jsf/core"> 

<f:metadata> 
    <f:viewParam name="actionId" value="#{editActionView.actionId}" required="true" /> 
</f:metadata>   
<h:body> 

的支持bean如下所示:

EditActionView.java

@ManagedBean 
@ViewScoped 
public class EditActionView { 
    private long actionId; 

    @PostConstruct 
    void init() { 
     System.out.println("actionId: " + getActionId()); 
    } 


    public long getActionId() { 
     return actionId; 
    } 

    public void setActionId(long actionId) { 
     this.actionId = actionId; 
    } 

当我现在请我的应用程序:

http://localhost:8080/aip/editAction.jsf?actionId=37 

actionId始终是0.我的错在哪里?

回答

1

ManagedBean是在调用setter之前构造的。因此,@PostConstruct方法中的System.out.println(...)将输出long类型的actionId的默认值为0. 然后在UPDATE_MODEL_VALUES阶段中调用setter。您可以通过在setter方法中添加另一个System.out.println(...)来检查该问题,该方法应打印正确的值。

+1

hm ...我想基于GET参数初始化我的后备bean。我将如何检索该值? – matthias

+0

这是一个很好的答案:[http://stackoverflow.com/questions/9844526/when-to-use-fviewaction-prerenderview-versus-postconstruct](http://stackoverflow.com/questions/9844526/when-to -use-fviewaction-prerenderview-versus-postconstruct)。总结:您可以使用''(自JSF 2.2以来)或''(JSF 2.0,2.1) – Tomek