使用哪个XML命名空间与JSF 2.2

时间:2015-06-26 08:41:55

标签: jsf facelets jsf-2.2 xml-namespaces java-ee-7

我已将我的应用程序从JSF 1.2迁移到2.2。

它在java.sun.comxmlns:f="http://java.sun.com/jsf/core"上使用了XML命名空间。但是,Oracle's Java EE 7 tutorial正在使用xmlns.jcp.org域上的XML命名空间 xmlns:f="http://xmlns.jcp.org/jsf/core"

推荐哪一个,为什么会改变?

3 个答案:

答案 0 :(得分:11)

  

推荐哪一个?

继续/usr/local/Cellar/mysql/5.6.25/support-files/mysql.server start域上的XML命名空间。这是自2013年Java EE 7以来新引入的(包括a.o. JSF 2.2,Servlet 3.1,CDI 1.1等)。请注意,这不仅会影响Facelets文件,还会影响faces-config.xmlweb.xmlbeans.xml等XML配置文件。

xmlns.jcp.org上的旧XML命名空间仍然存在向后兼容性,但支持最终将在未来的Java EE版本中消失。您应该尽快迁移代码库。使用"在所有文件中查找和替换应该是一项微不足道的任务。平均IDE提供的设施。

只有较旧的Mojarra 2.2.0 / 2.2.1版本存在与XML命名空间更改相关的错误,但这些错误不应在较新版本中显示。另见a.o。

  

为什么会改变?

因为自2010年以来Java不再来自Sun.请注意,他们很聪明,不能使它java.sun.com或与当前拥有的公司紧密相关的东西。它现在很好地和独立地绑定到JCP(Java Community Process),它是真正负责管理Java(EE)规范的人。

答案 1 :(得分:5)

我简要总结了所有新的官方oracle命名空间:

const express = require('express')
const router = express.Router()
const mongoose = require('mongoose')

const Order = require('../models/orders')
const Product = require('../models/products')

router.get('/', (req, res, next) => {
    Order.find()
        .select('_id product quantity')
        .then(docs => {
            res.status(200).json({
                count: docs.length,
                orders: docs
            })
        })
        .catch(err => {
            error: err
        })
})

router.post('/', (req, res, next) => {
    Product.findById(req.body.productId)
        .then(product => {
            if (!product){
                return res.status(404).json({
                    message: 'Product not found'
                })
            }
            const order = new Order({
                _id: mongoose.Types.ObjectId(),
                quantity: req.body.quantity,
                product: req.body.productId
            })
            return order.save()
        })
        .then(result => {
            res.status(201).json({
                message: 'Order stored',
                createdOrder: result

            })
        })
        .catch(err => {
            console.log(err)
            res.status(500).json({
                error: err
            })
        })
})

router.delete('/:orderId', (req, res, next) => {
    Order.remove({_id: req.params.orderId})
    .then(order => {
        res.status(200).json({
            message: 'Order deleted'
        })
    })
    .catch(err => {
        console.log(err)
        res.status(500).json({
            error: err
        })
    })
})

router.get('/:orderId', (req, res, next) => {
    Order.findById(req.params.orderId)
    .then(order => {
        res.status(200).json({
            order: order
        })
    })
    .catch(err => {
        console.log(err)
        res.status(500).json({
            error: err
        })
    })
})

module.exports = router 

我将此作为所有 .xhtml 文件的模板。详细信息可以在官方facelet标记库中找到:JavaServer Faces 2.2 Facelets Tag Library Documentation

希望这会有所帮助:)

答案 2 :(得分:1)

对于有名称空间混淆/问题的未来访问者:

我想强调一下找出要使用的命名空间的一般方法:

  • 如果要使用JSF HTML标记库或JSF核心标记库中的标记,请打开JSF实现JAR(如Oracle Mojarra,Apache MyFaces- myfaces-impl-2.3.1.jar)并找到标记库' s {{ 1}}或.tld文件(您可以在.xml目录下找到它)并使用那里提到的命名空间。
  • 如果您想使用RichFaces或PrimeFaces,请打开他们的实施JAR(如META-INFrichfaces-components-ui-4.0.0.Final.jar)并执行与上述相同的操作。

如果实施具有primefaces-6.2.jar(例如.tld),那么您可以使用rich.tld元素的值,例如<uri>。如果实施具有<uri>http://richfaces.org/rich</uri>(例如.xml),那么您可以使用rich.taglib.xml元素的值,例如<namespace>

我上面提到的与JSF严格相关,但总的来说也很好。关键是如果你使用实现JAR中的命名空间,那么你永远不会遇到问题。