我使用JBoss Seam 2.2.0來製作一個web應用程序,並且我希望在接收它們之前修剪我的輸入,甚至在Hibernate Bean驗證階段之前。這可能嗎?我看到someone使用PhaseListener
做相同的功能。這是做這件事的最好方法嗎?在JBoss Seam中修剪輸入
回答
我爲此使用了一個轉換器。工作得很好。
頁:
<h:inputText value="#{myBean.myValue}" converter="#{stringTrimConverter}"/>
代碼:
@Name("stringTrimConverter")
@BypassInterceptors
@Converter
public class StringTrimConverter implements javax.faces.convert.Converter {
public Object getAsObject(FacesContext context, UIComponent cmp, String value) {
if(StringUtils.isBlank(value)) {
return null;
} else {
return value;
}
}
public String getAsString(FacesContext context, UIComponent cmp, Object value) {
if(value != null) {
return value.toString().trim();
}
return null;
}
}
謝謝。這當然是一個可能的解決方案,但我必須手動添加轉換器到每個輸入字段。我希望可以有一個更簡單的方法。 – 2009-09-08 09:11:54
一個建議是修剪JavaScript中的文本,一旦用戶改變輸入的值:
<h:inputText ... onchange="this.value = trim(this.value);"/>
與JavaScript函數:
function trim(myString) {
return myString.replace(/^\s+/g,'').replace(/\s+$/g,'');
}
編輯,關於你的評論:
我建議的解決方案是做到這一點的最佳方法因爲它是在客戶端完成的。但是,正如您在評論中所說的那樣,如果客戶端的瀏覽器不允許使用Javascript,它將不起作用。 As shown here,95%的用戶在他們的瀏覽器上激活了Javascript(並且這是在一月!)。但是,如果您確實需要支持任何Javascript瀏覽器,我建議您確實實施PhaseListener解決方案。
EDIT2
與Convertor
提出達摩該解決方案還工作,但是你需要指定每輸入,則不需要與PhaseListener
轉換器,即你會需要始終爲您的所有輸入添加converter="#{stringTrimConverter}"
。
謝謝。這是部分解決方案,但對禁用JavaScript的客戶端無效。 – 2009-09-07 09:54:32
好的,然後我編輯了我的答案... – romaintaz 2009-09-07 11:33:36
謝謝。許多瀏覽器都支持JavaScript,但這在桌面上。一些手機瀏覽器不支持JavaScript(雖然很多)。另一方面,我不喜歡信任從客戶端發送的值,所以我寧願在客戶端和服務器端都這樣做。 – 2009-09-08 09:13:57
也許是更好的辦法是擴大<h:inputText>
,創建自己的組件,它幾乎是一樣的<h:inputText>
但trimmes結果通過默認。
在思想上我看來,應該有inputText的屬性,默認情況下即修剪:
<h:inputText value="#{myBean.text}" trim="true"/>
更新:
好了,這裏是你如何創建一個微調的一個組成部分inputText字段。 但是,請注意,我沒有測試代碼,所以我不是100%肯定它會工作,但它應該。
在faces-config.xml
添加您的組件
<component>
<component-type>foo.InputControlComponent</component-type>
<component-class>my.package.foo.InputControl</component-class>
</component>
創建WEB-INF/foo.taglib.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE facelet-taglib PUBLIC
"-//Sun Microsystems, Inc.//DTD Facelet Taglib 1.0//EN"
"http://java.sun.com/dtd/facelet-taglib_1_0.dtd">
<facelet-taglib>
<namespace>http://whatever.com/foo</namespace>
<tag>
<tag-name>inputControl</tag-name>
<component>
<component-type>foo.InputControlComponent</component-type>
</component>
</tag>
</facelet-taglib>
在web.xml
<context-param>
<param-name>facelets.LIBRARIES</param-name>
<param-value>/WEB-INF/foo.taglib.xml</param-value>
</context-param>
InputControl.java
public class InputControl extends UIPanel {
public InputControl() {
super();
}
private void childrenEncodeBegin(FacesContext context, List<UIComponent> children) {
for (UIComponent comp : children) {
if (comp instanceof UIInput) {
comp = (UIInput) comp;
((UIInput) comp).setValue(((UIInput) comp).getValue().toString().trim());
}
// Encode recursively
if (comp.isRendered() && comp.getChildCount() > 0)
childrenEncodeBegin(context, comp.getChildren());
}
}
public void encodeBegin(FacesContext context) throws IOException {
if (getChildren() != null)
childrenEncodeBegin(context, getChildren());
}
}
現在,在你的XHTML可以使用這樣的:
<foo:inputControl>
<ui:include src="myForm.xhtml"/>
</foo:inputControl>
這看起來像個好主意。你可以添加一個關於如何做的例子嗎? – 2010-09-22 08:33:58
- 1. 在JBoss Seam中使用JBoss Web SingleSignOn
- 2. 在JBOSS中使用XHTML Seam
- 3. JBoss Seam培訓
- 4. Seam 2與Jboss 7
- 5. JBoss Seam的構造函數注入
- 6. 保存用戶輸入的JBoss Seam的Web項目網頁
- 7. 在JBoss Seam中的EntityQuery限制
- 8. SEAM項目在JBoss AS中運行?
- 9. 如何deployee jboss seam 2.1.2 IN Jboss 7
- 10. 修剪Mako輸出
- 11. 修剪Struts2文本字符串輸入
- 12. 選擇二:修剪輸入空格
- 13. 從表單輸入修剪空格?
- 14. 如何禁用AngularJS輸入的修剪?
- 15. 修剪和檢查,如果空輸入
- 16. 使用EJBQL和EntityQuery jboss seam
- 17. JBoss Seam的Excel和HTTPS
- 18. Arquillian,Tomcat和Jboss Seam 2
- 19. RestEasy,JBoss Seam神祕異常
- 20. JBoss Seam項目錯誤
- 21. 無法創建JBoss Seam EntityManager
- 22. Jboss Seam JSESSIONID Cookie設置
- 23. JBoss Seam設計模式?
- 24. zk ajax框架vs JBoss Seam
- 25. 辛格爾頓與JBoss SEAM
- 26. 在使用JBOSS Seam 2.2.1時,JBoss6:HTTP 404(SEAM)
- 27. 什麼是jboss seam中的對話?
- 28. 權限商店未安裝在JBoss Seam
- 29. Seam 2.2應用程序在JBoss 7.1上?
- 30. Laravel 5.4 $ request->在輸入中獲取修剪空白
http://stackoverflow.com/a/8327848/617373 – Daniel 2014-09-03 19:24:00