当我点击任何链接时,它应该在JSF,Primefaces的同一个新窗口中打开

时间:2014-01-01 05:06:02

标签: jsf jsf-2 primefaces

在我的JSF页面中,我很少Links{link1,link2,link3,link4}-{Student Id's}.

我尝试的是当我点击链接时它在"NEW WINDOW".

中打开学生信息

当我点击下一个链接时,它是打开一个新窗口,但我想在同一个新窗口中打开,即目标应该是打开的同一个新窗口。

Diagramatical Representation:

Target Link to Same Window

我从STACKOVERFLOW Open Page in New Window收集东西时试过的一段代码:

<p:dataTable id="studentDtTble" var="studData" value="#{studentController.dataList}">
        <p:columnGroup type="header">
            <p:row>
                    <p:column headerText="StudentId"></p:column>
                    <p:column headerText="StudentName"></p:column> 
                    <p:column headerText="Add" ></p:column>     
            </p:row>
        </p:columnGroup>
            <p:column>
                <p:commandLink id="sidlink" action="/studentinfo.xhtml" target="_blank">  
                    <h:outputText value="#{studData.studentId}" styleClass="txtlink" />
                </p:commandLink>
            </p:column>
            <p:column>
               <h:outputText value="#{studData.studentName}" />
            </p:column>
            <p:column >
                <p:selectBooleanCheckbox value="#{studData.add}" />
            </p:column>
    </p:dataTable>

@Nosnhoj回复后编辑:When i Click on any of the SID Link then there Details Should Opened in the "Same NEW Window".

1 个答案:

答案 0 :(得分:5)

使用<h:commandLink>代替<p:commandLink>

我尝试了你的代码并做了一点改变:

<h:commandLink id="sidlink" action="#{studentController.selectStudent(studData)}" target="_blank">  
    <h:outputText value="#{studData.studentId}" styleClass="txtlink" />
</h:commandLink>

<p:commandLink>更改为<h:commandLink> ,并且调用辅助bean中的方法来设置所选的学生。(对于{{ 1}}应该需要学生信息。)

以下是New Window的代码:

studentController.selectStudent

以下是private Student selectedStu; public String selectStudent(Student stu) { selectedStu = stu; return "/studentinfo.xhtml"; } 的代码:

New Window

其中只显示所选学生的姓名,以及您想要的其他链接 请注意, <h:form> <h:commandLink value="Another Link" action="/anotherinfo.xhtml" target="_self"/> <br/> Student: <h:outputText value="#{studentController.selectedStu.studentName}"/> </h:form> 属性为target,因为您希望新页面显示在同一窗口中。

最后,_self只是我通过NetBeans创建的空白页面,所以不需要发布它。

以下是您可能会看到的内容:
enter image description here

点击“Johnson”的id后:
enter image description here

点击“另一个链接”后:
enter image description here


更新

由于@ User2561626解释了他/她的意图,我更新了我的答案如下:
如果您希望弹出 新窗口 而不是 新标签 ,则应更改以下代码:< / p>

anotherinfo.xhtml

我将<p:commandLink id="sidlink" actionListener="#{studentController.selectStudent(studData)}" oncomplete="window.open('studentinfo.xhtml', 'newwindow', 'width=300, height=250');"> <h:outputText value="#{studData.studentId}" styleClass="txtlink" /> </p:commandLink> 更改回<h:commandLink>,将<p:commandLink>改为action,因为我们想先设置所选的学生,最后我在actionListener中添加window.open {1}}属性,以便新页面将在新窗口中打开,但不会在制表符中打开 当然,我们需要编辑方法oncomplete,如下所示:

studentController.selectStudent()

正如您所看到的,返回类型现在是 void ,此方法唯一可以做的就是设置所选的学生。
希望这可能有所帮助。