As a feature in my JSF Web application, i need online editing for word documents. In order to update a word document that i have in my database table i do the following :
1/create the datatable and the column which contains the Commandlinks that shows the dialogue that has the <p:editor>
.(used datatable binding in a sessionscoped Managedbean)
//the creation of the column that has Commandlinks.
CommandLink rapstatelink = (CommandLink) application.createComponent(CommandLink.COMPONENT_TYPE);
rapstatelink.setId("MRepShowButton");
rapstatelink.setUpdate(":form1:formero");
rapstatelink.setOnclick("EditorDialog.show();");
ValueExpression value = ef.createValueExpression(elc, "#{exam}", Cotation.class);
ValueExpression target = ef.createValueExpression(elc, "#{dyna.selectedExamen}", Cotation.class);
//this two lines should update the editor with the loaded doc from datatabase.
rapstatelink.addActionListener(new SetPropertyActionListenerImpl(target, value));
ValueExpression value1 = ef.createValueExpression(elc, "#{dyna.selectedExamen.examen.rapport.rapportWrittenFile}", byte[].class);
ValueExpression target1 = ef.createValueExpression(elc, "#{dyna.raptext}", byte[].class);
rapstatelink.addActionListener(new SetPropertyActionListenerImpl(target1, value1));
column.getChildren().add(rapstatelink);
table.getChildren().add(column);
2/create the dialogue that contains the on my jsf page :
<!-this is wrapped in a global form id="form1"->
<p:dialog header="Compte rendu"
widgetVar="EditorDialog"
resizable="true"
id="patDlg"
showEffect="fade"
hideEffect="drop"
modal="true"
position ="center middle"
maximizable="true"
dynamic="true"
width="1200"
height="850">
<h:panelGrid id="display" ellpadding="4" style="margin:0 auto;">
<h:form id="formero">
<p:messages id="msg2" showDetail="true" closable="true" />
<p:editor id="editoreo"
value="#{dyna.raptext}"
converter="#{HTMLConverter}"
width="1100"
height="700" />
<h:panelGrid columns="3" style="margin-top:10px">
<p:commandButton id="submitButton"
value="Enregistrer"
actionListener="#{dyna.saveDoc(dyna.selectedExamen.examen.rapport.rapportId)}"
process="@this" update="msg2"
icon="ui-icon-disk" />
<p:commandButton id="clearButton"
type="button"
value="Vider"
onclick="editoreo.clear();"
icon="ui-icon-refresh" />
<p:commandButton id="hideButton"
type="button"
value="Annuler"
onclick="EditorDialog.hide();"
icon="ui-icon-close" />
</h:panelGrid>
</h:form>
</h:panelGrid>
</p:dialog>
3/this is the saveDoc() method that updates the table :
public void saveDoc(String idr) {
try {
//raptext is a field in the same managed bean.(session scoped)
DAO_Examen.UpdateRapporttext(raptext, idr);
FacesMessage msg = new FacesMessage("Terminé avec succes", "operation bien effectué " + idr + "|||||");
FacesContext.getCurrentInstance().addMessage(null, msg);
} catch (Exception c) {
c.printStackTrace();
}
}
--Just in case here is my HTMLConverter :
@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
try {
if (value != null) {
ByteArrayInputStream bin = new ByteArrayInputStream((byte[]) value);
HWPFDocumentCore wordDocument = WordToHtmlUtils.loadDoc(bin);
WordToHtmlConverter wordToHtmlConverter = new WordToHtmlConverter(DocumentBuilderFactory.newInstance()
.newDocumentBuilder().newDocument());
wordToHtmlConverter.processDocument(wordDocument);
Document htmlDocument = wordToHtmlConverter.getDocument();
ByteArrayOutputStream out = new ByteArrayOutputStream();
DOMSource domSource = new DOMSource(htmlDocument);
StreamResult streamResult = new StreamResult(out);
TransformerFactory tf = TransformerFactory.newInstance();
Transformer serializer = tf.newTransformer();
serializer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
serializer.setOutputProperty(OutputKeys.INDENT, "yes");
serializer.setOutputProperty(OutputKeys.METHOD, "html");
serializer.transform(domSource, streamResult);
out.close();
value = new String(out.toByteArray());
return (String) value;
} else {
return "";
}
} catch (Exception ex) {
ex.printStackTrace();
return "";
}
}
The Question :
Evreything works fine, but when i fire the action from the command button i don't get the edited text, i get the same very text that i loaded in the first time with no modification. I want to know how may i get the value of the new edited text, so i can save it to the datatabse.