В настоящее время я пытаюсь вызвать JS-скрипт, чтобы экспортировать диаграмму из компонента диаграммы поверхностей. Проблема заключается в том, что переменная base64str, кажется, быть пустым, и ответственный скрипт для заполнения этого значения не вызывается каким-либо причинам:JS-код не выполнен
XHTML код:
<p:chart id="chart" type="line" widgetVar="chart" model="#{cont.lineModel}" style="height:550px;width:1800px">
<p:ajax event="itemSelect" listener="#{cont.itemSelect}" update="growl" />
</p:chart>
<p:commandButton id="exp" value="Export" icon="ui-icon-extlink"
onclick="exportChart();" actionListener="#{cont.submittedBase64Str}"
/>
<h:inputHidden id="b64" value="#{cont.base64Str}" />
<script type="text/javascript">
function exportChart() {
img = chart.exportAsImage();
document.getElementById('hform:b64').value = img.src;
}
</script>
Контроллер:
public void submittedBase64Str(ActionEvent event){
// You probably want to have a more comprehensive check here.
// In this example I only use a simple check
if(base64Str.split(",").length > 1){
String encoded = base64Str.split(",")[1];
byte[] decoded = org.apache.commons.codec.binary.Base64.decodeBase64(encoded);
// Write to a .png file
try {
RenderedImage renderedImage = ImageIO.read(new ByteArrayInputStream(decoded));
ImageIO.write(renderedImage, "png", new File("D:\\out.png"));
} catch (IOException e) {
e.printStackTrace();
}
}
}
Благодаря
Я попробовал, но он все еще не работает ... – Amelie
Просто ради этого вы можете поставить предупреждение() прямо в начале вашей функции? – Alexey
Предупреждение появилось только в начале скрипта. Кажется, что код: img = chart.exportAsImage(); не было выполнено. Затем выполняется actionListener. – Amelie