Почему этот параметр отправляется как Нуль в моем Бобе? - PullRequest
0 голосов
/ 14 октября 2011

Я использую JSF 2 и EJB 3.1 для создания формы.

Я использую эту часть страницы, чтобы получить некоторые данные, чтобы я мог передать их своему бобу, используя verifyDialog чуть ниже

<p:column headerText="#{bundle.edit}" style="width:10px; overflow:visible;">  
    <p:rowEditor/>                            
</p:column>
<p:column headerText="#{bundle.delete}" style="width:10px; overflow:visible;">
    <p:commandButton update=":form" oncomplete="confirmation.show()" 
                     image="ui-icon ui-icon-close" title="Delete">  
        <f:param value="#{user}" name="userAction" />
    </p:commandButton>  
</p:column>
</p:dataTable>

<p:confirmDialog message="Are you sure? user:#{param['userAction']} " width="500"  
                    header="Confirm" severity="alert" widgetVar="confirmation">  
    <p:commandButton value="Yes sure" update=":form" 
              actionListener="#{userController.deleteAction(param['userAction'])}"
              oncomplete="confirmation.hide()" />  
    <p:commandButton value="Not yet" onclick="confirmation.hide()" type="button" />  

</p:confirmDialog>

</h:form>

И это Боб, который должен получить его

@Named(value = "userController")
@Stateful
@RequestScoped
@TransactionManagement(TransactionManagementType.CONTAINER)
public class UserController implements Serializable {

    private User current;

    @Inject
    private br.com.cflex.itm.dataaccess.UserFacade userFacade;

    public UserController() {
    }

    public void deleteAction(User user) {
        userFacade.remove(user);
    }

Но мой бин принимает значение NULL только как пользователь, и в диалоге Я печатаю данные, чтобы видеть, что там выбран объект пользователя.

Что плохого в передаче таких параметров?
Почему я получаю нулевое значение в своем Бине? Потому что они теряются в общении между клиентом и сервером ...

1 Ответ

2 голосов
/ 14 октября 2011
<p:commandButton action="#{userController.deleteAction(param['userAction'])}" />

EL actionactionListener) оценивается при отправке формы, а не при ее отображении. Параметры запроса находятся в области запроса и отсутствуют в последующем запросе формы отправки. Вы должны передать это:

<p:commandButton action="#{userController.deleteAction(param['userAction'])}">  
    <f:param name="userAction" value="#{param['userAction']}" />
</p:commandButton>

EL <f:param> оценивается при отображении формы. Таким образом, он будет присутствовать в сгенерированном HTML, а JavaScript позаботится о том, чтобы его передали.

Обратите внимание, что параметры запроса имеют тип String. Ожидая, что они будут User, не сработает вообще. По сути, он содержит значение User#toString(). Вам нужно будет взять String в качестве аргумента действия и преобразовать его в User самостоятельно. Или лучше используйте <f:viewParam>, в котором вы можете явно указать конвертер.

...