gpt4 book ai didi

jsf - 使用属性为转换器创建自定义标签

转载 作者:行者123 更新时间:2023-12-04 16:47:32 25 4
gpt4 key购买 nike

我在网上找到了一个转换器,并尽我所能将其更改为我的需要。问题是我需要添加一个必须检查的标志(即字符串),并且转换器必须将特定模式应用于字符串。

自定义转换器:

@FacesConverter("convtest.UrlConverter")
public class UrlConverter implements Converter {

@Override
public Object getAsObject(FacesContext facesContext, UIComponent component, String value) {

StringBuilder url = new StringBuilder();

if(value!=null){
if(value.length()==13){
String tempstring;
tempstring=value.toString();
String finalstring= tempstring.substring(0, 4) + "-" + tempstring.substring(4, 8) + "-" + tempstring.substring(8, 13);
url.append(finalstring);

}else{
url.append(value);
}
}else
url.append("");

try {
new URI(url.toString());
} catch (URISyntaxException e) {

return null;
}

UrlData urlData = new UrlData(url.toString());
return urlData;
}

@Override
public String getAsString(FacesContext facesContext,
UIComponent component, Object value) {
try {
return value.toString();
} catch (Exception e) {
return null;
}
}


}

XHTML:

 <h:inputText value="#{userData.data}">
<f:converter converterId="convtest.UrlConverter" />
</h:inputText>

现在的问题是,例如我有 2 种转换类型:

  • hju
  • zurt

假设 hju 有输出格式 XXXX-XXXX-XXXXXXzurt 的输出格式为 XX-XX-XX-XX-XX-XX-X

现在我想调用转换器,例如:

 <f:converter converterId="convtest.UrlConverter" type="hju" />

或者类似的东西,让它使用正确的模式。

关于如何做到这一点的任何想法?

最佳答案

您需要在 *.taglib.xml 中将自定义转换器注册为新标签您可以在其中指定任意数量的属性,然后将其映射为转换器实例的 bean 属性。

所以,给定一个新属性 type :

@FacesConverter("convtest.UrlConverter")
public class UrlConverter implements Converter {

private String type; // +getter+setter

}

还有这个 /WEB-INF/my.taglib.xml (假设 Facelets 上的 JSF 2.x):

<?xml version="1.0" encoding="UTF-8"?>
<facelet-taglib
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facelettaglibrary_2_0.xsd"
version="2.0"
>
<namespace>http://example.com/ui</namespace>

<tag>
<tag-name>urlConverter</tag-name>
<converter>
<converter-id>convtest.UrlConverter</converter-id>
</converter>
<attribute>
<name>type</name>
<type>java.lang.String</type>
</attribute>
</tag>
</facelet-taglib>

/WEB-INF/web.xml中注册如下:

<context-param>
<param-name>javax.faces.FACELETS_LIBRARIES</param-name>
<param-value>/WEB-INF/my.taglib.xml</param-value>
</context-param>

那么这个用法应该是这样的:

<html ... xmlns:my="http://example.com/ui">
...
<h:inputText ...>
<my:urlConverter type="hju" />
</h:inputText>
<html ... xmlns:my="http://example.com/ui">
...
<h:inputText ...>
<my:urlConverter type="zurt" />
</h:inputText>

或者,如果您碰巧使用 JSF 实用程序库 OmniFaces ,那么您也可以使用 <o:converter> 保存上述 XML 样板文件如下:

<html ... xmlns:o="http://omnifaces.org/ui">
...
<h:inputText ...>
<o:converter converterId="convtest.UrlConverter" type="hju" />
</h:inputText>
<html ... xmlns:o="http://omnifaces.org/ui">
...
<h:inputText ...>
<o:converter converterId="convtest.UrlConverter" type="zurt" />
</h:inputText>

它会透明地将这些属性设置为转换器属性。

关于jsf - 使用属性为转换器创建自定义标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31406474/

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