当我使用onClick事件</p:commandlink>时,<p:commandlink>不起作用

时间:2011-11-24 08:13:04

标签: primefaces

希望你们一切顺利。 scenerio是我有一个页面,您上传图片,然后将其删除。我使用了像这样的代码

<h:panelGrid columns="5"
             border=""
             width="20%"
             style="position: absolute; top: 50px;"
             columnClasses="asteriskColumns, nameColumns" >

    <h:outputText value="*" />
    <h:outputText value="Map: " />
    <p:fileUpload id="cityMap"
                  description="Image"
                  update="city messages"
                  allowTypes="*.jpg;*.png;*.gif;*.jpeg;"
                  auto="true"
                  fileUploadListener="#{cityDetail.imageUpload}" >

    </p:fileUpload>

    <p:graphicImage id="city"
                    value="#{cityDetail.imagePath}"
                    width="80"
                    height="50"
                    cache="false">

        <f:event type="preRenderComponent" listener="#{cityDetail.putImage}" />

    </p:graphicImage>

    <p:commandLink update="city"
                   action="#{cityDetail.removeImage}"
                   style="color: #0d5b7f;text-decoration: underline"
                   onclick="">

        <h:outputText value="remove" />

    </p:commandLink>

    <h:outputText value="*" />
    <h:outputText value="Image1: " />
    <p:fileUpload id="cityImage1"
                  description="Image"
                  update="Image1 messages"
                  allowTypes="*.jpg;*.png;*.gif;*.jpeg;"
                  auto="true"
                  fileUploadListener="#{cityDetail.imageUpload}" >

    </p:fileUpload>

    <p:graphicImage id="Image1"
                    value="#{cityDetail.imagePath}"
                    width="80"
                    height="50"
                    cache="false" >

        <f:event type="preRenderComponent" listener="#{cityDetail.putImage}" />

    </p:graphicImage>

    <p:commandLink update="Image1"
                   action="#{cityDetail.removeImage}"
                   style="color: #0d5b7f;text-decoration: underline"
                   onclick="if (!confirm('Are you sure, you want to delete the picture?')) { return false; }; return true;">

        <h:outputText value="remove" />

    </p:commandLink>

    <h:outputText value="*" />
    <h:outputText value="Image2: " />
    <p:fileUpload id="cityImage2"
                  description="Image"
                  update="Image2 messages"
                  allowTypes="*.jpg;*.png;*.gif;*.jpeg;"
                  auto="true"
                  fileUploadListener="#{cityDetail.imageUpload}" >

    </p:fileUpload>

    <p:graphicImage id="Image2"
                    value="#{cityDetail.imagePath}"
                    width="80"
                    height="50"
                    cache="false" >

        <f:event type="preRenderComponent" listener="#{cityDetail.putImage}" />

    </p:graphicImage>

    <p:commandLink update="Image2"
                   action="#{cityDetail.removeImage}"
                   style="color: #0d5b7f;text-decoration: underline"
                   onclick="if (!confirm('Are you sure, you want to delete the picture?')) { return false; }; return true;">

        <h:outputText value="remove" />

    </p:commandLink>
.....

如果我使用

,问题是每件事情都运转良好
onclick=""

但是当我使用

onclick="if (! confirm('Are you sure, you want to delete the picture?') ) { return false;}; return true; "

然后删除不起作用。为什么?请告诉我我做错了什么。

我正在使用PrimeFaces 2.2

6 个答案:

答案 0 :(得分:3)

我遇到了同样的问题,设置ajax = false对我不起作用。

我找到的解决方案是通过 onstart 更改 onclick

似乎primefaces使用onclick来处理ajax动作,因此当onclick返回一个值(为true或false )时,整个动作都会中止。

如果onstart返回true,则操作继续执行,如果为false,则中止。

答案 1 :(得分:2)

这样做:

<p:commandLink update="Image1" action="#{cityDetail.removeImage}"
   onstart="return confirm('Are you sure, you want to delete the picture?')" />

答案 2 :(得分:1)

这看起来很奇怪'因为你用Java方式尝试这种(有点)但你使onclick="if (! confirm('Are you sure, you want to delete the picture?') ) { return false;}; return true; "变得复杂 - 你没有正确使用javascript confirm函数。 你可以写:

onclick="return confirm('Are you sure, you want to delete the picture?')"

,但由于您使用的是Primefaces(顺便说一下 - 您可以升级到3.0.M4),您可以使用confirmDialog组件:

<p:commandButton value="Delete picture" onclick="confirmation.show()" type="button"/>
<p:confirmDialog message="Are you sure, you want to delete the picture?"  
            showEffect="bounce" hideEffect="explode"  
            header="Initiating deleting process" severity="alert" widgetVar="confirmation">  

    <p:commandButton value="Yes Sure" update="<some component you want to update>" oncomplete="confirmation.hide()"  actionListener="#{myBean.deleteMethod}" />  
    <p:commandButton value="Not Yet" onclick="confirmation.hide()" type="button" />   

</p:confirmDialog>

写作确实更多,但它肯定更优雅,更好!

答案 3 :(得分:1)

返回true而false不需要那里 只需使用简单如下代码

onclick="return confirm('Are you sure, you want to delete the picture?')"

答案 4 :(得分:1)

我没有使用p:commandLink。虽然我是这样做的,但工作正常

<h:outputText value="*" />
<h:outputText value="Map: " />
<p:fileUpload id="cityMap"
              description="Image"
              update="city messages"
              allowTypes="*.jpg;*.png;*.gif;*.jpeg;"
              auto="true"
              fileUploadListener="#{cityDetail.imageUpload}" >

</p:fileUpload>

<p:graphicImage id="city"
                value="#{cityDetail.imagePath}"
                width="80"
                height="50"
                cache="false">

    <f:event type="preRenderComponent" listener="#{cityDetail.putImage}" />

</p:graphicImage>

<h:commandLink value="remove"
               title="Remove Picture"
               style="color: #0d5b7f;text-decoration: underline"
               onclick="if (! confirm('Are you sure, you want to remove picture?') ) { return false;}; return true; ">

     <f:ajax event="click"
             render="city"
             listener="#{cityDetail.removeImage}"/>

 </h:commandLink>

由于

答案 5 :(得分:0)

如果您在该标记中使用p:commandLink,则会找到ajax;设置ajax=false,然后就可以了。