JSF h: CommandButton, использующий предыдущий Бин в качестве параметра - PullRequest
0 голосов
/ 28 октября 2011

Я работал с моим проектом JSF, и у меня появилось новое сомнение.Мой код xhtml выглядит следующим образом:

<?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:f="http://java.sun.com/jsf/core"
      xmlns:t="http://myfaces.apache.org/tomahawk">
    <h:head>
        <title>Facelet Title</title>
    </h:head>
    <h:body>
        <h:form enctype="multipart/form-data" >
            <h:selectOneMenu rendered="#{uploadVerifier.check(userVerifier.username)}" >
                <f:selectItems value="#{uploadVerifier.options}" />
            </h:selectOneMenu>
                <br/>
                <t:inputFileUpload required="true" value="#{uploadFile.upFile}" />
                <br/>
            <h:commandButton value="Validar"
                             action="#{uploadFile.upload(userVerifier.username)}"/>
        </h:form>
    </h:body>
</html>

Проблема в том, что каждый раз, когда я нажимаю кнопку, она отправляет мне исключение NullPointerException, потому что кажется, что userVerifier.username не возвращает значение.Это значение Бина имеет параметр из предыдущего xhtml и еще более странно, потому что это значение я использую в h: selectOneMenu ...

Чего здесь не хватает?Заранее спасибо!

PS uploadFile.upload (параметр String) должен просто напечатать значение param .

1 Ответ

0 голосов
/ 29 октября 2011

Причина ясна: #{userVerifier.username} присутствует в области только при отображении страницы с формой, а не при обработке отправленной формы в последующем запросе. JSF будет затем заново оценивать все выражения EL. Если оба bean-компонента созданы в одном и том же представлении, то это должно работать, в противном случае вам придется вместо этого передать его в качестве параметра запроса. Однако я рекомендую использовать <f:viewParam> или @ManagedProperty в целевом представлении / bean-компоненте вместо того, чтобы вручную извлекать его из карты параметров запроса.

Смотри также:


Не связано с конкретной проблемой: кажется, что вы проверяете вошедшего в систему пользователя в каждом действии. Это неуклюже Я предлагаю сохранить его в сеансе HTTP (должен делать управляемый компонент области сеанса) и создать Filter, который проверяет присутствие вошедшего в систему пользователя для каждого запроса.

Смотри также:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...