Java 如何防止单击<;时刷新页面;h:commandLInk>;

Java 如何防止单击<;时刷新页面;h:commandLInk>;,java,html,ajax,jsf,page-refresh,Java,Html,Ajax,Jsf,Page Refresh,当用户单击我的应用程序中的时,我试图阻止页面刷新。我尝试过这个,但不起作用: 更新: <h:dataTable value="#{person.IssueList}" var="p" > <h:column style="width: 20px"> <f:facet name="header">Issue</f:facet> <h:commandLink value="#{p.IssueDesc}"/

当用户单击我的应用程序中的
时,我试图阻止页面刷新。我尝试过这个,但不起作用:

更新:

 <h:dataTable value="#{person.IssueList}" var="p" >
    <h:column style="width: 20px">
        <f:facet name="header">Issue</f:facet>
        <h:commandLink value="#{p.IssueDesc}"/>
    </h:column>

    <h:column style="width: 20px">
         <f:facet name="header">Reporting Date</f:facet>
         <p:calendar  value="#{p.issuerepDt}" rendered="#{p.editable}"                 id="CalendarId"/>                
         <h:outputText value="#{p.issuerepDt}" rendered="#{not p.editable}" />
    </h:column>

    <h:column>
            <f:facet name="header">Action</f:facet>
        <h:commandLink  value="Edit" action="#{person.editAction(p)}">
            <f:ajax execute="@form" render="@none" />          
        </h:commandLink>    

            </h:column>
    </h:dataTable>

我使用的是MKyong的概念。我将尝试使用
f:ajax的
监听器
,而不是
h:commandLink的
action

<h:commandLink value="Edit">
    <f:ajax listener="#{person.editAction(p)}" execute="@form" render="dataTableId calendarId" />          
</h:commandLink>  


另外,请注意ajax之后要渲染的内容。

因为我看到您在日历组件中使用primefaces,所以您可能还需要使用primefaces命令按钮和数据表。primefaces组件在一起玩得很好

从下面的示例中,您可以看到我给了您的数据表一个id,并且在commandLink上,我添加了一个更新属性,以在调用操作后更新数据表。默认情况下,primefaces有一个ajax属性,该属性在commandLinks上设置为true

<p:dataTable id="myTable" value="#{person.IssueList}" var="p" >
    <p:column style="width: 20px" headerText="Issue">
         <p:commandLink value="#{p.IssueDesc}"/>
    </p:column>

    <p:column style="width: 20px" headerText="Reporting Date">
         <p:calendar  value="#{p.issuerepDt}" rendered="#{p.editable}"                 id="CalendarId"/>                
         <h:outputText value="#{p.issuerepDt}" rendered="#{not p.editable}" />
    </p:column>

    <p:column headerText="Action">
         <p:commandLink  value="Edit" action="#{person.editAction(p)}" update="myTable"/>
    </p:column>
</p:dataTable>


您确定它是
人。
而不是
人。
另外,请尝试将您的
edtiAction
方法设置为void方法…感谢您注意到输入错误。您只想让我将操作返回类型更改为void,并对上面发布的代码进行任何更改吗?是的,尝试,
public void edtiAction(){}否则它将是一个隐式导航。这应该可以正常工作。我相信你只是把你的具体问题表达得很糟糕。您已经完成了通过嵌入
防止页面刷新的工作。它现在不再刷新了,对吗?我想你的实际问题是,当你点击链接时,输出文本没有更改为日历,你不知道怎么做,对吗?@BalusC…..是的,这正是我的问题。抱歉,有任何困惑。请向我建议解决方案。我通过查看你的其他答案实现了上述内容。什么不起作用?有什么问题?发生了什么,你期望发生什么?你确定渲染应该是@none吗?再次呈现数据表。我想你想看到一些变化。这是怎么一回事?把它的id放在render选项中,而不是@none。是的,我考虑过BalusC的评论来更新我的帖子。这就是为什么我告诉您将dataTable id放在render属性中,而不是@none。但也许我的解决方案还不够。也许你应该把你所有的元素都改成primefaces的元素,这样它们就可以很好地交谈了,就像鲶鱼的回答一样。
<p:dataTable id="myTable" value="#{person.IssueList}" var="p" >
    <p:column style="width: 20px" headerText="Issue">
         <p:commandLink value="#{p.IssueDesc}"/>
    </p:column>

    <p:column style="width: 20px" headerText="Reporting Date">
         <p:calendar  value="#{p.issuerepDt}" rendered="#{p.editable}"                 id="CalendarId"/>                
         <h:outputText value="#{p.issuerepDt}" rendered="#{not p.editable}" />
    </p:column>

    <p:column headerText="Action">
         <p:commandLink  value="Edit" action="#{person.editAction(p)}" update="myTable"/>
    </p:column>
</p:dataTable>