Нулевое значение при чтении скрытого значения в бэк-бине

Это мой вариант использования:

У меня есть CKEditor и скрытое значение на моей странице.xhtml, например:

<p:panelGrid columns="1" id="pnTemplateHeader" style="width:700px">
                        <h:inputHidden required="false" value="#{templateBean.headerContent}" id="headerValue" binding="#{templateBean.hiddenHeader}"/>
                            <h:inputTextarea cols="90" rows="20" class="ckeditor" id="head" name="head" >
                                #{templateBean.headerContent}
                            </h:inputTextarea>
                              <script type="text/javascript" >
                                 CKEDITOR.replace('head', {
                                     removeButtons: 'Underline,Strike,Subscript,Superscript,Anchor,Styles,Specialchar',
                                });
                             </script>

                            </p:panelGrid>

Теперь мне нужно иметь возможность получить весь текст, введенный пользователем в CKEditor, я нашел этот путь в http://kb4dev.com/tutorial/jsf-and-ckeditor/jsf-2.x--ckeditor-integration-guide

Они говорят, что я могу извлечь значение из скрытого в бэк-бина, используя следующее.

.xhtml:

<h:commandButton id="previewTemplateButton" onclick="document.getElementById('frmCreateTemplate:footerValue').value = CKEDITOR.instances.footer.getData(); action="#{templateBean.export2PDF}" >

        </h:commandButton>

Но когда я получаю значение в бэк-бине, я просто получаю значение NULL.

Бобовый бэк:

System.out.println("Values: footer=" + footerContent + ", body= " + bodyContent + ", header=" + headerContent);

Что может быть не так?

Я протестировал несколько подходов, таких как доступ к скрытому компоненту прямо в компоненте поддержки:

UIViewRoot root = FacesContext.getCurrentInstance().getViewRoot();
            UIComponent hiddenHeaderComp = root.findComponent("headerValue"); 

            hiddenHeaderComp = getUIComponentOfId(root, "headerValue");
            hiddenHeader = (UIInput)hiddenHeaderComp;
            if(hiddenHeader != null){
               System.out.println("After retrieving value: " +  hiddenHeader.getValue());
            }

Но это тоже не работает. Что я могу сделать?

1 ответ

Решение

Ну, я нашел проблему. Настоящая проблема здесь заключается в том, что я вызывал компонент только со значением inputhidden, но он находится внутри аккордеона Primefaces, который, в свою очередь, находится внутри формы, поэтому я пропустил:form:accordionid перед inputhidden id

Другие вопросы по тегам