f:setPropertyActionListener设置空值而不是预期值

Sco*_*ttM 2 jsf jsf-2

我的观点是:

<h:commandLink value="BookFlight" action="#{bookSeatController.doLoginOrCC}">
   <f:setPropertyActionListener target="#{bookSeatController.flightNumber}" 
                  value="#{flightInfoController.flight.number}" />
</h:commandLink>
Run Code Online (Sandbox Code Playgroud)

我的二传手是:

public void setFlightNumber(String flightNumber) {
   this.flightNumber = flightNumber;
}
Run Code Online (Sandbox Code Playgroud)

当我使用调试器我得到flightNumbernull在二传手.但是,如果我将视图更改为以下内容:

<h:commandLink value="BookFlight" action="#{bookSeatController.doLoginOrCC}">
   <f:setPropertyActionListener target="#{bookSeatController.flightNumber}" 
                  value="122334" />
</h:commandLink>
Run Code Online (Sandbox Code Playgroud)

flightNumber属性设置为122334.这是如何导致的,如何解决它来设置预期值而不是null

Bal*_*usC 7

如果#{flightInfoController.flight.number}请求作用域,则flight在处理表单提交的请求期间,它必须保持与在显示表单的请求期间完全相同.这必须发生在bean的(post)构造函数中.

如果这不是一个选项,因为它取决于一些基于请求的变量,那么你最好的办法是将bean放在视图范围内(但我仍然假设你的bean设计得合理,不做任何业务/在吸气剂中预加工).

如果将bean放在视图范围中又不是一个选项,那么您需要将其作为一个完整的请求参数传递.你可以做到这一点<f:param>.

<h:commandLink value="BookFlight" action="#{bookSeatController.doLoginOrCC}">
   <f:param name="flightNumber" value="#{flightInfoController.flight.number}" />
</h:commandLink>
Run Code Online (Sandbox Code Playgroud)

你可以让JSF设置它通过@ManagedPropertyBookSeatController<f:viewParam>在当前视图.

也可以看看: