我的观点是:
<h:commandLink value="BookFlight" action="#{bookSeatController.doLoginOrCC}">
<f:setPropertyActionListener target="#{bookSeatController.flightNumber}"
value="#{flightInfoController.flight.number}" />
</h:commandLink>
我的二传手是:
public void setFlightNumber(String flightNumber) {
this.flightNumber = flightNumber;
}
当我使用调试器时,我在setter中得到flightNumber
null
。但是,如果我将视图更改为以下内容:
<h:commandLink value="BookFlight" action="#{bookSeatController.doLoginOrCC}">
<f:setPropertyActionListener target="#{bookSeatController.flightNumber}"
value="122334" />
</h:commandLink>
flightNumber
属性设置为122334.这是如何导致的,如何设置目标值而不是null
?
答案 0 :(得分:7)
如果#{flightInfoController.flight.number}
是请求作用域,则在处理表单提交请求期间,它必须保留与显示表单请求期间完全相同的flight
。这必须发生在bean的(post)构造函数中。
如果这不是一个选项,因为它取决于一些基于请求的变量,那么你最好的办法就是将bean放在视图范围内(但我仍然认为你的bean设计得恰到好处而且不做在getter中的任何业务/预加载工作。)
如果将bean放在视图范围中而不是一个选项,那么您需要将其作为一个完整的请求参数传递。你可以<f:param>
。
<h:commandLink value="BookFlight" action="#{bookSeatController.doLoginOrCC}">
<f:param name="flightNumber" value="#{flightInfoController.flight.number}" />
</h:commandLink>
您可以让JSF在@ManagedProperty
中按BookSeatController
或在当前视图中按<f:viewParam>
进行设置。
答案 1 :(得分:0)
如果它在分配“122334”时有效但在分配flightInfoController.flight.number
时它是“空”并且由于您没有收到任何异常,那么这意味着您的flightInfoController
可能未正确初始化(关于它的字段) flight
中的number
和flight
。{/ p>
确保bean已正确初始化(或使用bean代码更新您的OP)。