Передача параметра в p: remoteCommand из JavaScript - не работает? - PullRequest
0 голосов
/ 10 октября 2019

, хотя этот вопрос задавался несколько раз, почему-то предложенные решения у меня не сработали.

, поэтому я пытаюсь спросить снова. Я использую Primefaces в версии 6.2 и протестировал с использованием расширений Primefaces в 6.2.10

Мой текущий код: Что я не понимаю, так это то, как remoteCommand и javaScript взаимодействуют и отправляют «результат» (resultx)значение для методов bean ... я пробовал даже другие комбинации, но каждый раз, когда журнал был нулевым, в то время как java-скрипт всегда печатал ожидаемый результат.

XHTML:

<ui:composition
xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.org/ui"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
xmlns:H="http://java.sun.com/jsf/html"
xmlns:pe="http://primefaces.org/ui/extensions"
>

<p:panel header="Quest Panel" id="questEditPanel">
<p:diagram id="diagram" value="#{questChart.model}" style="height:1200px" styleClass="ui-widget-content" var="el">
<f:facet name="element">

    <h:outputText id="questName" value="#{el.questName}" style="display:block; margin-top:1em;"/>
    <p:commandLink onclick="setClickedSpanElement(this)" >
        <p:graphicImage name="woodenui/gear.png" width="20" height="20"/>
    </p:commandLink>


</f:facet>


<pe:remoteCommand name="execAssignment" action="#{questChart.setResult}">
    <pe:methodSignature parameters="java.lang.String" />
    <pe:methodParam name="resultx" />
</pe:remoteCommand>

<p:remoteCommand name="execAssignment2" actionListener="#{questChart.setResult2}" />


<p:ajax event="connect" listener="#{questChart.onConnect}" />
<p:ajax event="disconnect" listener="#{questChart.onDisconnect}" />
<p:ajax event="connectionChange" listener="#{questChart.onConnectionChange}" />
</p:diagram>
</p:panel>

<script type="text/javascript">

function setClickedSpanElement(parentElement) {
var resultx = parentElement.parentNode.innerHTML;
console.log(result)
execAssignment([{resultx:result}]);
execAssignment2([{resultx:result}]);
}

</script>

</ui:composition>

bean:

public void setResult() {
    FacesContext context = FacesContext.getCurrentInstance();
    Map<String, String> map = context.getExternalContext().getRequestParameterMap();
    log.info("done... : " + map.get("resultx"));
}

public void setResult2(String resultx) {

    log.info("done...2 : " + resultx);
}

LOG:

01:32:47.986 [http-nio-8080-exec-3] INFO  com.wolfo.beans.QuestChart - done... : null
01:32:48.047 [http-nio-8080-exec-6] INFO  com.wolfo.beans.QuestChart - done...2 : javax.faces.event.ActionEvent[source=org.primefaces.component.remotecommand.RemoteCommand@3b30fbb2]

консоль браузера:

<span id="quest-editor-form:questName" style="display:block; margin-top:1em;">Quest Element 0</span><a id="quest-editor-form:j_idt13" href="#" class="ui-commandlink ui-widget" onclick="setClickedSpanElement(this);PrimeFaces.ab({s:&quot;quest-editor-form:j_idt13&quot;});return false;"><img id="quest-editor-form:j_idt14" src="/javax.faces.resource/woodenui/gear.png.xhtml" alt="" width="20" height="20"></a>

1 Ответ

0 голосов
/ 10 октября 2019

Хорошо. Это было не так очевидно, но мне удалось это исправить. Вместо использования pe: remoteCommand action = "" .... изменение в actionListener = "" дало решение.

<pe:remoteCommand name="execAssignment" actionListener="#{questChart.setResult2}">
    <pe:methodSignature parameters="java.lang.String" />
    <pe:methodParam name="resultx" />
</pe:remoteCommand>

сработало.

полный ответ: xhtml деталь с панелью:

<p:panel header="Quest Panel" id="questEditPanel">
<p:diagram id="diagram" value="#{questChart.model}" style="height:1200px" styleClass="ui-widget-content" var="el">
<f:facet name="element">

<h:outputText id="questName" value="#{el.questName}" style="display:block; margin-top:1em;"/>
<p:commandLink onclick="setClickedSpanElement(this)" >
<p:graphicImage name="woodenui/gear.png" width="20" height="20"/>
</p:commandLink>


</f:facet>

<pe:remoteCommand name="execAssignment" actionListener="#{questChart.setResult2}">
<pe:methodSignature parameters="java.lang.String" />
<pe:methodParam name="resultx" />
</pe:remoteCommand>


<p:ajax event="connect" listener="#{questChart.onConnect}" />
<p:ajax event="disconnect" listener="#{questChart.onDisconnect}" />
<p:ajax event="connectionChange" listener="#{questChart.onConnectionChange}" />
</p:diagram>
</p:panel>

<script type="text/javascript">

function setClickedSpanElement(parentElement) {
var resultx = parentElement.parentNode.innerHTML;
console.log(resultx)
execAssignment(resultx);
}

</script>

боб:

public void setResult2(String resultx) {
 log.info("done...2 : " + resultx);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...