Не могли бы вы также опубликовать код управляемого бина.Из того, что я вижу, атрибут commentText
в вашем commentController
является простым String
вместо List<String>
.Например, если у вас есть три текстовых области, у вас должно быть три разных переменных, в которых должно храниться содержимое текстовой области.Вот почему вам нужен список.
Здесь вы можете прочитать некоторые подробности, потому что у меня была та же проблема, что и у вас.
Зная все, что должен выглядеть ваш кодкак это:
Управляемый компонент:
private List<String> commentText;
// get& set
Facelet:
<ui:repeat var="blogPost" value="#{blogPosts}" varStatus = "loop">
<h:form>
<div class="full">
<label for="newComment" value = "Write a comment" />
<h:inputTextarea id = "newComment" value="#{commentController.commentText[loop.index]}" rows="10" cols="40" />
</div>
<div class="full">
<h:commandButton action="#{commentController.setComment()}" value="write comment" />
</div>
</h:form>
Некоторые другие указатели:
- избегайте того, чтобы
<br />
в теге label. - обращали внимание на атрибут textarea
id
.Это должно быть то же самое, что связано с ярлыком.Если нет, вы получите несколько предупреждений о просмотре, поскольку платформа не сможет найти указанные вами идентификаторы.Не беспокойтесь о том, что идентификаторы идентичны в цикле ui:repeat
.Если вы проанализируете код HTML, вы увидите, что SF обрабатывает идентификаторы, и они различаются.
LE:
Я думаю, что причина, по которой вы имеетеэта проблема в том, что вы выделили память для List<String>
, но в списке нет строк.Платформа хочет поместить значения в List
, но нет объекта String
для установки.
Чтобы решить эту проблему, в CommentController
необходимо добавить необходимые пустые строки в список:
@PostConstruct
protected void init(){
comment = new Comment();
commentTextListToWrite = new ArrayList<String>();
for (int i = 0; i < blogPosts.size(); i++){
commentTextListToWrite.add(new String());
}
}
blogPosts.size()
- это атрибут blogPosts, который вы используете в теге <ui:repeat>
.Я могу представить, что вы можете получить к нему доступ также в CommentController
.Таким образом, каждый раз, когда вы создаете экземпляр сущности CommentController
, создается экземпляр commentTextListToWrite
, который будет содержать необходимое количество пустых строк, которые будут завершены в представлении.