我想我有一个解决方案...
将此添加到您的 xhtml 页面中:
<ice:outputText id="myHiddenCompo" rendered="#{DebugXHTML}" value="#{bean.getFileNameAndPath()}" />
在 BackingBean 中创建一个类似这样的方法:
public final String getFileNameAndPath(){
FacesContext context = FacesContext.getCurrentInstance();
UIViewRoot root = context.getViewRoot();
UIComponent c = JSFHelper.findComponent(root, "myHiddenCompo");
return c.getValueExpression("value").toString();
}
JSFHelper.java 提取:
public static UIComponent findComponent(final UIComponent c, final String id) {
if (id.equals(c.getId())) {
return c;
}
Iterator<UIComponent> kids = c.getFacetsAndChildren();
while (kids.hasNext()) {
UIComponent found = findComponent(kids.next(), id);
if (found != null) {
return found;
}
}
return null;
}
结果:
/WEB-INF/includes/folder/verticalTabs/folderDisplay.xhtml @8,114 value="#{#{bean.getFileNameAndPath()}}"
之后,您可以使用 substring 来获取您需要的部分。
我找到了一个“更好”的实现,因为在上面,我们遇到了多个 id 的问题(jsf 2 找到重复的 id)
只需在 xhtml 中添加这一行:
<ice:outputText rendered="#{DebugXHTML}" value="#{bean.getFileNameAndPath(component)} "/>
component是 jsf 2 的关键字,表示当前组件。
并修改支持 bean 代码:
public final String getFileNameAndPath(UIComponent hiddenCompo) {
String manipString = hiddenCompo.getValueExpression("value").toString();
return manipString.substring(0, manipString.indexOf(".xhtml") + 6);
}