我有一个简单的JSF表单,对输入文本进行了一些验证.就像是:
<h:inputText id="firstName" value="#{userHandler.user.firstName} required="true" />
<h:message for="firstName" />
Run Code Online (Sandbox Code Playgroud)
工作良好.除了错误消息如下所示:
"j_id786643870_20c27c0a:firstName:验证错误:值是必需的."
如何告诉JSF不要显示元素的元素id并只显示文本消息?
也就是说,我只想说:
"验证错误:需要值."
我正在使用JSF2和GlassFish,PrimeFaces 2.1.
这样工作,showCreateProfile()方法被命中,方法返回"profileForm",浏览器重定向到该页面:
<h:commandLink action="#{profileHandler.showCreateProfile}" value="#{msg.menu_createNewProfile}" />
Run Code Online (Sandbox Code Playgroud)
但是,这不起作用,showCreateProfile()方法获取命中,并且方法返回"profileForm"但浏览器不会重定向到页面.我尝试了三件不同的事情,没有运气:
<p:commandLink action="#{profileHandler.showCreateProfile}" value="#{msg.menu_createNewProfile}" />
<p:commandLink action="#{profileHandler.showCreateProfile}" value="#{msg.menu_createNewProfile}" ajax="false" />
<p:commandLink action="#{profileHandler.showCreateProfile}" value="#{msg.menu_createNewProfile}" ajax="false" immediate="true"/>
Run Code Online (Sandbox Code Playgroud)
我有什么想法我做错了吗?
我有一个名为的托管bean UserSearchHandler,它有一个doSearch填充的方法,UserSearchHandler.searchResults它显示在userSearch.xhtml页面的表格中.
我有另一个托管bean UserHandler,它有一个showUser方法等等.
在搜索结果表中,用户名是一个链接,单击该链接时,应显示userView.xhtml页面上的用户详细信息.表和链接如下所示:
<p:dataTable var="user" value="#{userSearchHandler.searchResults" >
// ... and so on ... then
<h:commandLink value="#{user.firstName}" action="#{userHandler.showUser}">
<f:setPropertyActionListener target="#{userHandler.userIdToShow}" value="#{profile.id}"/>
</h:commandLink>
Run Code Online (Sandbox Code Playgroud)
当托管bean设置为session范围时,一切正常.
但是,当我更改bean的范围时request,搜索工作并填充表,但是当我点击名称链接时没有任何反应.我在userHandler.showUser方法上设置了一个断点,当它userSearchHandler被设置为"请求"范围时它永远不会被击中.
任何人都可以帮助解释为什么这是,或者我做错了什么?
我有一个带有WAR的EAR,我正在GlassFish 3.1上部署
目前,该应用程序在localhost:8080/myapp/index.jsf上运行
我希望它在localhost:8080/index.jsf上运行
为此,我将EAR中的application.xml从contextRoot"myapp"更改为contextRoot ="/"
当我使用GlassFish管理UI部署我的EAR时,它会给我一个部署错误,然后当我尝试浏览到管理界面时,它会向我显示默认的GlassFish主页.要恢复,我必须从命令行使用asadmin取消部署我的EAR,然后执行restart-domain以重新启动服务器.
我的理论是我的应用程序和GlassFish管理员UI都在root"/"上运行.
问题:在GlassFish 3.1的根目录中部署我的Web应用程序的正确方法是什么?或者这是不好的做法?
谢谢!
抢
我是一位经验丰富的Java程序员.习惯用Eclipse手工完成很多Swing,但过去几年大部分时间都是用Web东西.
我必须构建一个桌面用户界面,一种向导的东西,从列表中选择项目,键入字段,然后......下一个......接下来......那样的事情.
在我使用Swing手动构建它之前,我想知道Java世界中是否有关于桌面UI的任何重大进展.有什么我应该看的,可能是一个拖放式UI构建器,或某种框架,这将使它更容易?
任何建议都很有用,谢谢!抢
我有一个在GlassFish 3.1上运行的现有Java EE Web应用程序。通过在GlassFish 3.1中配置的jdbcRealm,登录可以正常工作。
另一个团队中的某人正在用PHP开发一个单独的Web应用程序,老板不希望这些应用程序的用户必须登录两次。也就是说,当他们登录Java Web应用程序并单击将其带到PHP应用程序的链接时,它们也应该已经登录到该应用程序。(反之亦然。)
不确定如何实施。我当时以为我可以生成一个长随机密钥(令牌),该随机密钥是在任一应用程序的登录时生成的,并在每个Web请求中传递给任一应用程序以标识已登录的用户,但这似乎并不安全。
我需要正确方向的指针。
我正在使用iText生成PDF.我创建了一个自定义PdfPageEventHelper来为每个页面添加页眉(和页脚).
我的问题是我不知道如何添加图像,因此它显示在"标题框"中.我只知道如何将图像添加到文档内容本身(如果这有意义).
这是一些代码片段......
public static void main(String[] args) {
Rectangle headerBox = new Rectangle(36, 54, 559, 788);
/* ... */
Document document = new Document(PageSize.A4, 36, 36, 154, 54);
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(FILENAME));
HeaderFooter event = new HeaderFooter();
writer.setBoxSize("headerBox", headerBox);
writer.setPageEvent(event);
document.open();
addContent();
document.close();
}
static class HeaderFooter extends PdfPageEventHelper {
public void onEndPage(PdfWriter writer, Document document) {
Rectangle rect = writer.getBoxSize("headerBox");
// add header text
ColumnText.showTextAligned(writer.getDirectContent(),
Element.ALIGN_RIGHT, new Phrase("Hello", fontHeader1),
rect.getLeft(), rect.getTop(), 0);
// add header image …Run Code Online (Sandbox Code Playgroud) 我有以下javascript,在表的底部添加一个新行.
它在Firefox中运行良好,但它在IE(版本8)中不起作用.
据我所知,没有明显的错误.
任何想法都非常有用!
function addRow() {
// locate the last row in the table
var table = document.getElementById("approversTable");
var rows = document.getElementsByTagName("tr");
var rowToClone;
for (var i=0; i<rows.length; i++) {
if (rows[i].id != "") {
rowToClone = rows[i];
}
}
// clone the row
var clone = rowToClone.cloneNode(true);
var rowId = Math.floor(Math.random()*100000);
clone.id = rowId;
// add the new row to the table
table.appendChild(clone);
}
Run Code Online (Sandbox Code Playgroud) 我需要在我的Manager类中调用带有此签名的方法:
void createPlayer(Player& player, PlayerType& playerType);
Run Code Online (Sandbox Code Playgroud)
我的播放器定义如下:
using namespace std;
enum PlayerType { FORWARD, DEFENSEMAN, GOALIE };
class Player {
public:
Player();
void setType(PlayerType);
private:
PlayerType type;
};
Run Code Online (Sandbox Code Playgroud)
这就是我尝试在main中调用方法的方法......
#include "Player.h"
#include "Manager.h"
int main() {
Manager manager;
Player player;
PlayerType t = PlayerType::FORWARD;
manager.createPlayer(player, t);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
...但是无法使用此错误进行编译:
Main.cc: In function ‘int main()’:
Main.cc:12:18: error: ‘PlayerType’ is not a class or namespace
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?注意:我无法更改createPlayer方法的签名.
我在我的应用程序中使用log4j2.
我想要的是一切都要去'调试'去控制台,一切到'info'去myapp.log,只有'info'去'myapp-audit.log'.
原因是,INFO主要包括对数据的成功修改(例如"用户创建","用户更新","用户删除"等).如果是有效的数据修改审计日志.
但我无法弄明白该怎么做.
如何才能获得"info"以登录"myapp-audit.log"?这是我目前的配置......
<?xml version="1.0" encoding="UTF-8"?>
<configuration status="WARN">
<appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
</Console>
<File name="LogFile" fileName="myapp.log">
<PatternLayout
pattern="%d{yyyy-mm-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
</File>
<File name="AuditFile" fileName="myapp-audit.log">
<PatternLayout
pattern="%d{yyyy-mm-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
</File>
</appenders>
<loggers>
<root level="debug">
<appender-ref ref="Console" level="debug" />
<appender-ref ref="LogFile" level="info" />
<appender-ref ref="AuditFile" level="info" /> <!-- I want ONLY 'info' here -->
</root>
</loggers>
</configuration>
Run Code Online (Sandbox Code Playgroud)