gpt4 book ai didi

jsf - 魔术用户界面 :repeat var

转载 作者:行者123 更新时间:2023-12-04 19:38:49 26 4
gpt4 key购买 nike

我偶然发现了一种出乎意料的行为,至少对我来说是这样。使用 ui:repeat 时,我似乎可以从外部访问 var。

代码 - 页面:

<f:metadata>
<f:event type="preRenderView" listener="#{xTest.init()}" />
</f:metadata>

<h:form id="xTestForm">
<h:panelGroup layout="block">
Track: #{trk.name}
</h:panelGroup>

<table>
<ui:repeat
value="#{xTest.trackList}"
var="trk">
<tr>
<td>#{trk.name}</td>
<td>
<p:commandLink
actionListener="#{xTest.setTrack(track)}"
value="test"
update=":xTestForm" />
</td>
</tr>
</ui:repeat>
</table>
</h:form>

代码 - Bean
package beans;

import dao.DAOFactory;
import dao.track.TrackDAO;
import dto.Track;
import exceptions.DAOException;
import java.io.Serializable;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import util.MessageUtil;

@ManagedBean
@ViewScoped
public class xTest implements Serializable {

private DAOFactory daoFactory = Config.getInstance().getDAOFactory();
private TrackDAO trackDAO;
private Track track = new Track();
private MessageUtil msg = new MessageUtil();
private List<Track> trackList = new ArrayList();

public xTest() {
trackDAO = daoFactory.getTrackDAO(true);
}

public void init() {
if (!FacesContext.getCurrentInstance().isPostback()) {
try {
trackList = trackDAO.listByAlbumid(241);
} catch (SQLException | DAOException ex) {
msg.setErrorMessage(ex);
}
}
}

public List<Track> getTrackList() {
return trackList;
}

public void setTrack(Track track) {
this.track = track;
}
}

如果我单击轨道列表中的链接,轨道名称将显示在 panelGroup 中。这怎么可能?

最佳答案

这是 Mojarra 中的一个错误。它的 UIRepeat在恢复 View 阶段,组件忘记在迭代结束时从请求范围中删除迭代变量。它在例如 MyFaces 中不起作用。
您不应该依赖它的业务代码。请注意 <h:dataTable>没有这个问题,它在迭代结束时从请求范围中正确删除迭代变量 ((UIData) component).setRowIndex(-1) in encodeEnd() method .

关于jsf - 魔术用户界面 :repeat var,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14398960/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com