我目前正在寻找使用Java Server Faces上传的文件.我发现使用RichFaces对它进行了很好的介绍.但是,我在这里理解这个过程有些麻烦.
首先,用户选择一个文件,如果立即上传设置为true,则使用ajax处理文件,到目前为止一直很好.然而,当谈到下一步时,Bean端的监听器会让我困惑:
public void listener(UploadEvent event) throws Exception{
UploadItem item = event.getUploadItem();
File f = item.getFile();
System.out.println(f.getAbsolutePath());
}
Run Code Online (Sandbox Code Playgroud)
绝对路径是我计算机上的临时目录,确定我理解,但是如何使该文件可用于webbapplication?我的应用程序部署为WAR文件.是否可以将其上传到WAR?可能听起来很愚蠢,但它实际上可能很方便.
我完全知道我可以重命名该文件以将其复制到新位置,但这是要走的路吗?
我在JSF Web应用程序中有HTML表.我正在使用动态生成行<ui:repeat>.我想要每行一个计数器.我怎么能得到这个?有帮助吗?
与富表面dataTable中的rowKeyVar类似.
在jsf页面中使用commandButton下载文件.使用:JSF和Richfaces.
我有一个表(扩展ExtendedDataModel实现可修改,可序列化)与一些数据,并在每一行按钮"下载".
<a4j:commandButton id="getDownload" value="download"
style="margin-left:10px;margin-right:10px;width:100px;"
action="#{controller.download}" immediate="true" ajaxSingle="true">
<f:setPropertyActionListener target="#{controller.idString}" value="#{item.id}" />
</a4j:commandButton>
Run Code Online (Sandbox Code Playgroud)
我必须在控制器中构建文件:
public void download(){
OutputStream out = null;
....
FacesContext fc = FacesContext.getCurrentInstance();
HttpServletResponse response = (HttpServletResponse) fc.getExternalContext().getResponse();
out = response.getOutputStream();
ZipOutputStream zipout = new ZipOutputStream(out);
.....
zipout.close();
response.setContentType("application/octet-stream");
response.addHeader("Content-Disposition", "attachment; filename=\""+filename+"\"");
out.flush();
....
} finally {
try {
if (out!=null){
out.close();
}
FacesContext.getCurrentInstance().responseComplete();
} catch (IOException e) {
logger.error(e);
}
}
...
}
Run Code Online (Sandbox Code Playgroud)
当我实现ExtendedDataModel时,问题就开始了.起初我使用了h:commandLink,但是控制器方法从未被调用过...我试过......现在调用了正确的方法,但是(zip)文件内容显示在页面中.我想在页面中有一个按钮/链接,用户可以单击该链接下载文件.页面本身不应该改变.有任何想法吗?
我可以创建一个servlet,但我不明白为什么ExtendedDataModel改变了里面链接的行为.
EDIT1
我用了
<h:commandLink id="getDownload" value="download" action="#{controller.download}">
<f:setPropertyActionListener target="#{controller.idString}" value="#{item.id}" /> …Run Code Online (Sandbox Code Playgroud) 我正在使用Seam和Richfaces制作一个菜单栏.代码是这样的:
<rich:dropDownMenu showDelay="250" hideDelay="0" submitMode="none">
<f:facet name="label">Tools</f:facet>
<rich:menuItem>
<s:link view="/pages/tools/ppaParameters/PpaParametersEdit.xhtml" value="Parameters" id="PpaParametersId" includePageParams="false" propagation="none"/>
</rich:menuItem>
<rich:menuGroup value="Security">
<rich:menuItem>
<s:link view="/pages/tools/security/ppaModule/PpaModuleEdit.xhtml" value="Module" id="PpaModuleId" includePageParams="false" propagation="none" />
</rich:menuItem>
</rich:menuGroup>
</rich:dropDownMenu>
Run Code Online (Sandbox Code Playgroud)
如何使菜单项与其"父亲"对齐?

Ferramentas =工具
Segurança=安全
Módulo=模块
我们很快开始开发新的Web应用程序,目前正在评估/提出要使用的技术堆栈.
对于视图层,我们必须在Primefaces,Icefaces 2(因为我们绝对需要JSF2)和Richfaces之间进行选择.我们的基本要求是外观和感觉,简单性和易开发性,可扩展性和性能(最重要).
利用哪种观点技术/框架最为可行.我们将不胜感激任何投入/专家意见.此外,如果有任何其他推荐的框架,请告诉我们.
感谢致敬
我知道这里有很多关于JSF paginatin的帖子,但没有一个让我满意.
为了将相当大的数据拆分成页面,我将使用RichFaces数据滚动组件.
它看起来很适合,但它看起来像是"人工"的分页.
我不喜欢的是它加载所有数据然后只显示其中的一部分.至少它似乎是这样做的.如我错了请纠正我.
丰富的面孔有很好的演示,但由于某种原因,他们跳过bean定义 - 只有xhtml.我看到一些提到ExtendedDataModel,但我找到的唯一例子并没有让我印象深刻.我为什么要有5个屏幕代码只显示数据子集?
老实说,这样一个简单的问题就像分页在JSF中非常复杂,我真的不明白为什么.
所以我的问题是:1.在Richfaces中是否可以只加载一页数据2.而不将其存储到会话中(我的意思是实际数据不列出状态 - 当前页面等)
我只对richfaces lib感兴趣,因为我已经在我的项目中使用了它,并且不会在其他方面引入依赖
提前
我正在尝试实现此处显示的布局

每个面板都应链接到一个支持bean,稍后我将根据上下文添加不同的组件.
我尝试使用panelgrid但无法实现这种外观.我更喜欢只使用JSF,但如果不可能或太复杂的RichFaces也可以.
谢谢!!
动机:我想在访问时减小页面的大小,所以我认为modalPanels上的延迟渲染会有所帮助.想法是在用户单击显示它的链接时呈现modalPanel.
我想在rich:modalPanel单击显示它的链接时进行延迟渲染.为了达到这个目的,我找到了一种方法:
代码modalPanel,包裹在里面a4j:outputPanel
<a4j:outputPanel id="a4jPanel">
<rich:modalPanel id="panel" rendered="#{bean.renderPanel}">
<!-- here modalPanel things -->
</rich:modalPanel>
</a4j:outputPanel>
Run Code Online (Sandbox Code Playgroud)
支持bean的代码(会话范围):
public boolean isRenderPanel() {
return renderPanel; //default value is false;
}
public void setRenderPanel(boolean value){
this.renderPanel=value;
}
public setRenderFalse(){
this.setRenderPanel(false);
}
Run Code Online (Sandbox Code Playgroud)
调用它的页面代码:
<a4j:form>
<a4j:jsFunction name="setRenderFalse" action="#{user.setRenderFalse}"/>
<a4j:commandLink value="render and show" oncomplete="Richfaces.showModalPanel('panel');setRenderFalse();" reRender="a4jPanel">
<f:setPropertyActionListener target="#{user.renderPanel}" value="true" />
</a4j:commandLink>
</a4j:form>
Run Code Online (Sandbox Code Playgroud)
问题:
modalPanel需要包含在一个a4j:outputPanel因为reRendering直接modalPanel不起作用(我从来不明白为什么).
渲染之后,需要额外的请求将渲染值设置为false(bean是会话范围的).否则,如果我们重新加载页面,则不会有任何延迟渲染,因为该值设置为true.
支持bean必须处理一个属性以保持每个modalPanel的状态,尽管此属性设置为true每次单击链接并设置为false请求完成时.我试图rendered用JS变量保持状态,但它似乎不起作用(它们只是在页面加载后再读取而且从不再读取).
有更优雅的方式吗?
在阅读RichFaces Vs PrimeFaces(性能)之后,我很想在我的Web应用程序中使用这两者来从两者中获得最大收益.
你觉得这可能吗?有哪些优点和缺点?
我有一个rich:tabPanel用switchType="client",其中一个标签设置了它switchType,ajax因为加载它的数据是一个昂贵的操作.当我单击此Ajax选项卡时,我希望将其标题更改为正在加载...以指示已识别出单击.加载完成后,标题应切换回Ajax Tab.
[Client Tab] [Ajax Tab]
<click on 'Ajax Tab'>
[Client Tab] [Loading...]
<wait...>
[Client Tab] [Ajax Tab]
<click on 'Client Tab'>
[Client Tab] [Ajax Tab]
Run Code Online (Sandbox Code Playgroud)
其实,大多数的上述预期作品所描述的,我唯一的问题是,当我从导航阿贾克斯选项卡到任何其他选项卡,将标题阿贾克斯Tab键切换回载入中...:
[Client Tab] [Ajax Tab]
<click on 'Ajax Tab'>
[Client Tab] [Loading...]
<wait...>
[Client Tab] [Ajax Tab]
<click on 'Client Tab'>
[Client Tab] [Loading...]
Run Code Online (Sandbox Code Playgroud)
我在RichFaces的JIRA中发现了一个问题,但是从版本3.2.1开始修复了这个问题.此外,我用谷歌搜索了几个小时,但未能找到任何类似的问题.
richfaces ×10
jsf ×7
java ×2
jsf-2 ×2
primefaces ×2
ajax4jsf ×1
css ×1
facelets ×1
html ×1
icefaces-1.8 ×1
java-ee ×1
jstl ×1
layout ×1
pagination ×1
seam ×1