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>