Атрибут обязательного составного компонента вызывает исключение в Mojarra 2.0.3 - PullRequest
4 голосов
/ 03 ноября 2010

Я играл с составными компонентами JSF 2.0, но меня немного смущает вопрос о том, для чего предназначен атрибут require в теге composite:attribute.В документации сказано, что обязательный атрибут равен true, если автор страницы должен предоставить значение для этого атрибута.

Я интерпретировал это как означающее, что значение должно быть предоставлено для всех составных: атрибуты, которые имеют required=true,Я также предположил, что пустая строка является допустимым значением.И вот как это работает в Мохарре 2.0.2.

Использование этого простого управляемого компонента:

@ManagedBean(name = "simpleMB")
@ViewScoped
public class SimpleManagedBean implements Serializable {

   private static final long serialVersionUID = -1;

   private String whatever;

   ... setter and getter
}

и составного компонента:

<composite:interface>
    <composite:attribute name="value" required="true" />
</composite:interface>

<composite:implementation>
    <h:outputText value="Value: '#{cc.attrs.value}'" />    
</composite:implementation>

Эти теги работали в Мохарре 2.0.2:

<foo:bar value="" />
<foo:bar value="#{simpleMB.whatever}" />

Однако, когда я обновился до 2.0.3, работает только первый тег.Второй тег вызывает это сообщение об ошибке:

/requiredAttribute.xhtml @20,42 <foo:bar> The following attribute(s) are 
required, but no values have been supplied for them: value.

Работает нормально, когда я установил значение false.

Я неправильно понял, что означает обязательный атрибут?Может кто-нибудь уточнить, какое поведение мне следует ожидать?

Спасибо.

Ответы [ 3 ]

2 голосов
/ 11 марта 2011

У нас есть проблемы со значением required = "true" в сочетании с компонентом @ViewScoped.

В нашем случае бин больше не ведет себя как бин @ViewScoped (новый вызов конструктора каждый раз).

Ваша проблема может заключаться в том, что, поскольку бин теряет свою область видимости, переменные снова становятся нулевыми?

В любом случае единственный, что я могу дать вам, это не использовать required = "true" или использовать компонент @SessionScoped.

(Возможно, это связано с тем, что Мохарра не может обрабатывать привязки к свойствам в бинах @ViewScoped)

0 голосов
/ 05 сентября 2011

Кажется, это была эта проблема , которая, похоже, была закрыта некоторое время назад, хотя я не могу найти, в какую версию она была включена.

0 голосов
/ 23 ноября 2010

Я не знаю, является ли это ошибкой, но это характер el-выражений.Тип выражения по умолчанию - String, а пустая строка переводится как null.

...